Merge remote-tracking branch 'origin/develop' into ent-11114-Gestion-de-versiones-Obsolescencia-planeada

This commit is contained in:
alejandro.campos@artica.es 2023-09-07 17:44:51 +02:00
commit 318fa38721
322 changed files with 73039 additions and 35306 deletions
extras
pandora_agents
pandora_console

@ -32,6 +32,7 @@ services:
PUBLICURL: ""
SLEEP: 5
RETRIES: 10
TZ: 'Europe/Madrid'
networks:
- pandora
ports:

@ -10,6 +10,8 @@ ENV DBPORT=3306
ENV SLEEP=5
ENV RETRIES=1
ENV OPEN=1
ENV TZ='Europe/Madrid'
ENV LC_ALL=C

@ -230,6 +230,10 @@ fi
echo "" > /opt/pandora/crontasks || touch /opt/pandora/crontasks
#set localtime
rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/$TZ /etc/localtime
#install pandora packages
echo "-> Istalling pandorafms"
cd /opt/pandora

@ -28,6 +28,7 @@ $PANDHOME_ENT/pandora_server/PandoraFMS-Enterprise/pandora_server_enterprise.spe
$CODEHOME/pandora_console/pandora_console.redhat.spec \
$CODEHOME/pandora_console/pandora_console.rhel7.spec \
$CODEHOME/pandora_agents/unix/pandora_agent.redhat.spec \
$CODEHOME/pandora_agents/unix/pandora_agent.redhat_bin.spec \
$CODEHOME/pandora_server/pandora_server.redhat.spec \
$PANDHOME_ENT/pandora_agents/pandora_agent.spec \
$PANDHOME_ENT/pandora_server/pandora_server_enterprise.redhat.spec \

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents
# Version 7.0NG.772, AIX version
# Version 7.0NG.773.3, AIX version
# Licensed under GPL license v2,
# Copyright (c) 2003-2023 Pandora FMS
# http://www.pandorafms.com

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents
# Version 7.0NG.772, FreeBSD Version
# Version 7.0NG.773.3, FreeBSD Version
# Licensed under GPL license v2,
# Copyright (c) 2003-2023 Pandora FMS
# http://www.pandorafms.com

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents
# Version 7.0NG.772, HP-UX Version
# Version 7.0NG.773.3, HP-UX Version
# Licensed under GPL license v2,
# Copyright (c) 2003-2023 Pandora FMS
# http://www.pandorafms.com

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents
# Version 7.0NG.772, GNU/Linux
# Version 7.0NG.773.3, GNU/Linux
# Licensed under GPL license v2,
# Copyright (c) 2003-2023 Pandora FMS
# http://www.pandorafms.com
@ -166,7 +166,7 @@ module_description User CPU Usage (%)
module_min_warning 70
module_max_warning 90
module_min_critical 91
module_max_critical 100
module_max_critical 0
module_unit %
module_end

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents
# Version 7.0NG.772, GNU/Linux
# Version 7.0NG.773.3, GNU/Linux
# Licensed under GPL license v2,
# Copyright (c) 2003-2023 Pandora FMS
# http://www.pandorafms.com

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents
# Version 7.0NG.772, Solaris Version
# Version 7.0NG.773.3, Solaris Version
# Licensed under GPL license v2,
# Copyright (c) 2003-2023 Pandora FMS
# http://www.pandorafms.com

@ -1,6 +1,6 @@
# Base config file for Pandora FMS Windows Agent
# (c) 2006-2023 Pandora FMS
# Version 7.0NG.772
# Version 7.0NG.773.3
# This program is Free Software, you can redistribute it and/or modify it
# under the terms of the GNU General Public Licence as published by the Free Software
# Foundation; either version 2 of the Licence or any later version
@ -119,7 +119,7 @@ module_description CPU Load (%)
module_min_warning 80
module_max_warning 90
module_min_critical 91
module_max_critical 100
module_max_critical 0
module_end
# Number processes

@ -1,6 +1,6 @@
# Fichero de configuracion base de agentes de Pandora
# Base config file for Pandora agents
# Version 7.0NG.772, AIX version
# Version 7.0NG.773.3, AIX version
# General Parameters
# ==================

@ -1,6 +1,6 @@
# Fichero de configuracion base de agentes de Pandora
# Base config file for Pandora agents
# Version 7.0NG.772
# Version 7.0NG.773.3
# FreeBSD/IPSO version
# Licenced under GPL licence, 2003-2007 Sancho Lerena

@ -1,6 +1,6 @@
# Fichero de configuracion base de agentes de Pandora
# Base config file for Pandora agents
# Version 7.0NG.772, HPUX Version
# Version 7.0NG.773.3, HPUX Version
# General Parameters
# ==================

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents
# Version 7.0NG.772
# Version 7.0NG.773.3
# Licensed under GPL license v2,
# (c) 2003-2023 Pandora FMS
# please visit http://pandora.sourceforge.net

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents
# Version 7.0NG.772
# Version 7.0NG.773.3
# Licensed under GPL license v2,
# (c) 2003-2023 Pandora FMS
# please visit http://pandora.sourceforge.net

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents
# Version 7.0NG.772
# Version 7.0NG.773.3
# Licensed under GPL license v2,
# please visit http://pandora.sourceforge.net

@ -1,6 +1,6 @@
# Fichero de configuracion base de agentes de Pandora
# Base config file for Pandora agents
# Version 7.0NG.772, Solaris version
# Version 7.0NG.773.3, Solaris version
# General Parameters
# ==================

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents
# Version 7.0NG.772, AIX version
# Version 7.0NG.773.3, AIX version
# Licensed under GPL license v2,
# Copyright (c) 2003-2023 Pandora FMS
# http://www.pandorafms.com

@ -1,5 +1,5 @@
package: pandorafms-agent-unix
Version: 7.0NG.772-230803
Version: 7.0NG.773.3-230906
Architecture: all
Priority: optional
Section: admin

@ -14,7 +14,7 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
pandora_version="7.0NG.772-230803"
pandora_version="7.0NG.773.3-230906"
echo "Test if you has the tools for to make the packages."
whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null
@ -42,6 +42,7 @@ mkdir -p temp_package/usr/bin/
mkdir -p temp_package/usr/sbin/
mkdir -p temp_package/etc/pandora/plugins
mkdir -p temp_package/etc/pandora/collections
mkdir -p temp_package/etc/pandora/ref
mkdir -p temp_package/etc/pandora/trans
mkdir -p temp_package/etc/pandora/commands
mkdir -p temp_package/etc/init.d/

@ -31,7 +31,7 @@ fi
if [ "$#" -ge 2 ]; then
VERSION="$2"
else
VERSION="7.0NG.772"
VERSION="7.0NG.773.3"
fi
# Path for the generated DMG file

@ -19,11 +19,11 @@
<choice id="com.pandorafms.pandorafms_src" visible="false">
<pkg-ref id="com.pandorafms.pandorafms_src"/>
</choice>
<pkg-ref id="com.pandorafms.pandorafms_src" version="7.0NG.772" onConclusion="none">pandorafms_src.pdk</pkg-ref>
<pkg-ref id="com.pandorafms.pandorafms_src" version="7.0NG.773.3" onConclusion="none">pandorafms_src.pdk</pkg-ref>
<choice id="com.pandorafms.pandorafms_uninstall" visible="true" customLocation="/Applications">
<pkg-ref id="com.pandorafms.pandorafms_uninstall"/>
</choice>
<pkg-ref id="com.pandorafms.pandorafms_uninstall" version="7.0NG.772" onConclusion="none">pandorafms_uninstall.pdk</pkg-ref>
<pkg-ref id="com.pandorafms.pandorafms_uninstall" version="7.0NG.773.3" onConclusion="none">pandorafms_uninstall.pdk</pkg-ref>
<!-- <installation-check script="check()" />
<script>
<![CDATA[

@ -5,9 +5,9 @@
<key>CFBundleIconFile</key> <string>pandorafms.icns</string>
<key>CFBundleIdentifier</key> <string>com.pandorafms.pandorafms_uninstall</string>
<key>CFBundleVersion</key> <string>7.0NG.772</string>
<key>CFBundleGetInfoString</key> <string>7.0NG.772 Pandora FMS on Aug 2020</string>
<key>CFBundleShortVersionString</key> <string>7.0NG.772</string>
<key>CFBundleVersion</key> <string>7.0NG.773.3</string>
<key>CFBundleGetInfoString</key> <string>7.0NG.773.3 Pandora FMS on Aug 2020</string>
<key>CFBundleShortVersionString</key> <string>7.0NG.773.3</string>
<key>NSPrincipalClass</key><string>NSApplication</string>
<key>NSMainNibFile</key><string>MainMenu</string>

@ -30,6 +30,7 @@ else
mkdir -p /usr/local/share/man/man1/
mkdir -p /usr/local/share/pandora_agent/collections/
mkdir -p /usr/local/share/pandora_agent/commands/
mkdir -p /usr/local/share/pandora_agent/ref/
mkdir -p /etc/pandora/
mkdir -p /var/spool/pandora/data_out/
mkdir -p /var/log/pandora/
@ -39,6 +40,7 @@ else
# Setting permissions to directories and files
chmod -R 700 /usr/local/share/pandora_agent/collections
chmod -R 700 /usr/local/share/pandora_agent/commands
chmod -R 700 /usr/local/share/pandora_agent/ref
chmod -R 755 /etc/pandora/
chmod -R 700 /var/spool/pandora/data_out
chmod -R 711 /var/log/pandora
@ -69,6 +71,7 @@ chown root:wheel /usr/local/bin/tentacle_client
ln -s /usr/local/share/pandora_agent/plugins /etc/pandora/plugins
ln -s /usr/local/share/pandora_agent/commands /etc/pandora/commands
ln -s /usr/local/share/pandora_agent/collections /etc/pandora/collections
ln -s /usr/local/share/pandora_agent/ref /etc/pandora/ref
# Copy manuals
@ -90,4 +93,4 @@ echo "/var/log/pandora/pandora_agent.log : 640 5 204
# Clean all install utilites
rm -Rf inst_utilities
exit 0
exit 0

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents
# Version 7.0NG.772, GNU/Linux
# Version 7.0NG.773.3, GNU/Linux
# Licensed under GPL license v2,
# Copyright (c) 2003-2023 Pandora FMS
# http://www.pandorafms.com
@ -187,7 +187,7 @@ module_description User CPU Usage (%)
module_min_warning 70
module_max_warning 90
module_min_critical 91
module_max_critical 100
module_max_critical 0
module_end
#Get load average

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents
# Version 7.0NG.772, FreeBSD Version
# Version 7.0NG.773.3, FreeBSD Version
# Licensed under GPL license v2,
# Copyright (c) 2003-2023 Pandora FMS
# http://www.pandorafms.com

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents
# Version 7.0NG.772, HP-UX Version
# Version 7.0NG.773.3, HP-UX Version
# Licensed under GPL license v2,
# Copyright (c) 2003-2023 Pandora FMS
# http://www.pandorafms.com

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents
# Version 7.0NG.772
# Version 7.0NG.773.3
# Licensed under GPL license v2,
# Copyright (c) 2004-2023 Pandora FMS
# https://pandorafms.com
@ -219,7 +219,7 @@ module_description User CPU Usage (%)
module_min_warning 70
module_max_warning 90
module_min_critical 91
module_max_critical 100
module_max_critical 0
module_unit %
module_group System
module_end
@ -310,3 +310,9 @@ module_plugin autodiscover --default
#module_description Zombies process on system
#module_group System
#module_end
#Hardening plugin for security compliance analysis. Enable to use it.
#module_begin
#module_plugin /usr/share/pandora_agent/plugins/pandora_sca
#module_absoluteinterval 7d
#module_end

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents
# Version 7.0NG.772, GNU/Linux
# Version 7.0NG.773.3, GNU/Linux
# Licensed under GPL license v2,
# Copyright (c) 2003-2023 Pandora FMS
# http://www.pandorafms.com

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents
# Version 7.0NG.772, NetBSD Version
# Version 7.0NG.773.3, NetBSD Version
# Licensed under GPL license v2,
# Copyright (c) 2003-2023 Pandora FMS
# http://www.pandorafms.com

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents
# Version 7.0NG.772, Solaris Version
# Version 7.0NG.773.3, Solaris Version
# Licensed under GPL license v2,
# Copyright (c) 2003-2023 Pandora FMS
# http://www.pandorafms.com

@ -1003,7 +1003,7 @@ use strict;
use warnings;
use Scalar::Util qw(looks_like_number);
use POSIX qw(strftime floor);
use POSIX qw(ceil floor strftime);
use Sys::Hostname;
use File::Basename;
use File::Copy;
@ -1030,8 +1030,8 @@ my $Sem = undef;
# Semaphore used to control the number of threads
my $ThreadSem = undef;
use constant AGENT_VERSION => '7.0NG.772';
use constant AGENT_BUILD => '230803';
use constant AGENT_VERSION => '7.0NG.773.3';
use constant AGENT_BUILD => '230906';
# Agent log default file size maximum and instances
use constant DEFAULT_MAX_LOG_SIZE => 600000;
@ -1121,6 +1121,7 @@ my %DefaultConf = (
'server_path_md5' => 'md5', #undocumented
'server_path_conf' => 'conf', #undocumented
'server_path_zip' => 'collections', #undocumented
'server_path_ref' => 'ref', #undocumented
'logfile' =>'/var/log/pandora/pandora_agent.log',
'logsize' => DEFAULT_MAX_LOG_SIZE,
'logrotate' => DEFAULT_LOG_ROTATE,
@ -1569,6 +1570,34 @@ sub parse_conf_modules($) {
$module->{'post_process'} = $1;
} elsif ($line =~ /^\s*module_interval\s+(\d+)\s*$/) {
$module->{'interval'} = $1;
} elsif ($line =~ /^\s*module_absoluteinterval\s+(.*)$/) {
my $absolute_interval = $1;
if ($absolute_interval eq 'once') {
$module->{'absoluteinterval'} = 0;
} elsif ($absolute_interval =~ /^(\d+)([smhd])?\s*$/) {
if (defined($2)) {
# Seconds.
if ($2 eq 's') {
$module->{'absoluteinterval'} = int($1);
}
# Minutes (convert to seconds).
elsif ($2 eq 'm') {
$module->{'absoluteinterval'} = int($1) * 60;
}
# Hours (convert to seconds).
elsif ($2 eq 'h') {
$module->{'absoluteinterval'} = int($1) * 3600;
}
# Days (convert to seconds).
elsif ($2 eq 'd') {
$module->{'absoluteinterval'} = int($1) * 86400;
}
} else {
$module->{'absoluteinterval'} = int($1) * $Conf{'interval'};
}
} else {
log_message ('setup', "Invalid value for module_absoluteinterval: $absolute_interval");
}
} elsif ($line =~ /^\s*module_timeout\s+(\d+)\s*$/) {
$module->{'timeout'} = $1;
} elsif ($line =~ /^\s*module_save\s+(\w+)$/) {
@ -1636,6 +1665,27 @@ sub parse_conf_modules($) {
next;
}
# Configure modules with an absolute interval.
if (defined($module->{'absoluteinterval'})) {
# Convert from seconds to actual agent intervals.
$module->{'interval'} = ceil($module->{'absoluteinterval'} / $Conf{'interval'});
# Make sure modules that run once are asynchronous.
if ($module->{'interval'} == 0) {
if ($module->{'type'} eq 'generic_data') {
$module->{'type'} = 'async_data';
} elsif ($module->{'type'} eq 'generic_proc') {
$module->{'type'} = 'async_proc';
} elsif ($module->{'type'} eq 'generic_data_string') {
$module->{'type'} = 'async_string';
}
}
# This file will be used for persistence.
$module->{'timestamp_file'} = $ConfDir . '/' . $Conf{'server_path_ref'} . '/' . md5($module->{'name'}) . '.ref';
}
# Set the intensive interval
if ($module->{'is_intensive'} == 1) {
$module->{'intensive_interval'} = $module->{'interval'};
@ -1643,9 +1693,9 @@ sub parse_conf_modules($) {
$module->{'intensive_interval'} = $module->{'interval'} * ($Conf{'interval'} / $Conf{'intensive_interval'});
}
# Make the module run the first time
$module->{'counter'} = $module->{'intensive_interval'};
# Initialize the module's execution counter.
init_counter($module);
# Replace macros
replace_macros ($module);
@ -2805,7 +2855,15 @@ sub exec_module {
}
}
if (++($module->{'counter'}) < $module->{'intensive_interval'}) {
# Modules that will run once.
if ($module->{'interval'} == 0) {
if ($module->{'counter'} == 0) {
$ThreadSem->up () if (defined ($ThreadSem) && $Conf{'agent_threads'} > 1);
return;
}
}
# Modules that will run periodically.
elsif (++($module->{'counter'}) < $module->{'intensive_interval'}) {
$ThreadSem->up () if (defined ($ThreadSem) && $Conf{'agent_threads'} > 1);
return;
}
@ -2862,6 +2920,9 @@ sub exec_module {
}
}
# Save the module's timestamp to disk.
save_module_timestamp($module);
$ThreadSem->up () if (defined ($ThreadSem) && $Conf{'agent_threads'} > 1);
}
@ -3547,6 +3608,44 @@ sub check_module_cron {
return 0;
}
################################################################################
# Initialize a module's internal execution counter.
################################################################################
sub init_counter($) {
my ($module) = @_;
# Open the timestamp file if available.
my $fh;
if (!defined($module->{'timestamp_file'}) ||
!open($fh, '<', $module->{'timestamp_file'})) {
# If intensive_interval is 0, setting counter to any value != 0 will make the module run.
$module->{'counter'} = $module->{'intensive_interval'} == 0 ? 1 : $module->{'intensive_interval'};
return;
}
# Read the timestamp from disk.
my $timestamp = int(<$fh>);
close($fh);
# Update the module's execution counter.
# If intensive_interval is 0, setting counter to 0 will prevent the module from running again.
$module->{'counter'} = $module->{'intensive_interval'} == 0 ? 0 : floor((time() - $timestamp) / $Conf{'interval'});
}
################################################################################
# Save a module's execution timestamp to disk for persistence.
################################################################################
sub save_module_timestamp($) {
my ($module) = @_;
return if (!defined($module->{'timestamp_file'}));
# Update the time reference.
open(my $fh, '>', $module->{'timestamp_file'}) or return;
print $fh time();
close($fh);
}
################################################################################
# Write module data in XML format.
################################################################################

@ -3,8 +3,8 @@
#
%global __os_install_post %{nil}
%define name pandorafms_agent_linux
%define version 7.0NG.772
%define release 230803
%define version 7.0NG.773.3
%define release 230906
Summary: Pandora FMS Linux agent, PERL version
Name: %{name}
@ -25,7 +25,7 @@ Requires(preun): chkconfig /bin/rm /usr/sbin/userdel
Requires: coreutils unzip
Requires: util-linux procps grep
Requires: /sbin/ip /bin/awk
Requires: perl(Sys::Syslog) perl(IO::Compress::Zip)
Requires: perl(Sys::Syslog) perl(IO::Compress::Zip) perl(File::Copy) perl(Sys::Hostname)
# Required by plugins
#Requires: sh-utils sed passwd net-tools rpm
AutoReq: 0
@ -100,6 +100,11 @@ if [ ! -e /etc/pandora/collections ]; then
ln -s /usr/share/pandora_agent/collections /etc/pandora
fi
if [ ! -e /etc/pandora/ref ]; then
mkdir -p /usr/share/pandora_agent/ref
ln -s /usr/share/pandora_agent/ref /etc/pandora
fi
if [ ! -e /etc/pandora/commands ]; then
mkdir -p /usr/share/pandora_agent/commands
ln -s /usr/share/pandora_agent/commands /etc/pandora
@ -143,7 +148,7 @@ fi
# Remove symbolic links
pushd /etc/pandora
for f in pandora_agent.conf plugins collections
for f in pandora_agent.conf plugins collections ref
do
[ -L $f ] && rm -f $f
done

@ -4,8 +4,8 @@
%global __os_install_post %{nil}
%define name pandorafms_agent_linux_bin
%define source_name pandorafms_agent_linux
%define version 7.0NG.772
%define release 230725
%define version 7.0NG.773.3
%define release 230906
Summary: Pandora FMS Linux agent, binary version
Name: %{name}
@ -19,16 +19,14 @@ Group: System/Monitoring
Packager: Sancho Lerena <slerena@artica.es>
Prefix: /usr/share
BuildRoot: %{_tmppath}/%{name}-%{version}-buildroot
BuildArch: noarch
BuildArch: x86_64
Requires(pre): shadow-utils
Requires(post): chkconfig /bin/ln
Requires(preun): chkconfig /bin/rm /usr/sbin/userdel
Requires: coreutils unzip
Requires: util-linux procps grep
Requires: /sbin/ip /bin/awk
Requires: perl(Sys::Syslog) perl(IO::Compress::Zip)
# Required by plugins
#Requires: sh-utils sed passwd net-tools rpm
#Requires: libnsl
AutoReq: 0
Provides: %{name}-%{version}

@ -3,8 +3,8 @@
#
%global __os_install_post %{nil}
%define name pandorafms_agent_linux
%define version 7.0NG.772
%define release 230803
%define version 7.0NG.773.3
%define release 230906
Summary: Pandora FMS Linux agent, PERL version
Name: %{name}
@ -94,6 +94,10 @@ if [ ! -e /etc/pandora/collections ]; then
mkdir /etc/pandora/collections
fi
if [ ! -e /etc/pandora/ref ]; then
mkdir /etc/pandora/ref
fi
if [ ! -e /etc/pandora/commands ]; then
mkdir /etc/pandora/commands
fi

@ -9,8 +9,8 @@
# Please see http://www.pandorafms.org. This code is licensed under GPL 2.0 license.
# **********************************************************************
PI_VERSION="7.0NG.772"
PI_BUILD="230803"
PI_VERSION="7.0NG.773.3"
PI_BUILD="230906"
OS_NAME=`uname -s`
FORCE=0
@ -408,6 +408,11 @@ install () {
chmod -R 700 $PANDORA_BASE$PANDORA_HOME/commands
ln -s $PANDORA_BASE_REAL$PANDORA_HOME/commands $PANDORA_BASE$PANDORA_CFG
echo "Creating the ref directory in to $PANDORA_BASE$PANDORA_HOME/ref..."
mkdir -p $PANDORA_BASE$PANDORA_HOME/ref
chmod -R 700 $PANDORA_BASE$PANDORA_HOME/ref
ln -s $PANDORA_BASE_REAL$PANDORA_HOME/ref $PANDORA_BASE$PANDORA_CFG
if [ $WITHOUT_TENTACLE_SERVER -eq 0 ]
then
echo "Copying tentacle server to $PANDORA_BASE$TENTACLE_SERVER"

@ -1,6 +1,6 @@
# Base config file for Pandora FMS Windows Agent
# (c) 2006-2023 Pandora FMS
# Version 7.0NG.772
# Version 7.0NG.773.3
# This program is Free Software, you can redistribute it and/or modify it
# under the terms of the GNU General Public Licence as published by the Free Software
# Foundation; either version 2 of the Licence or any later version
@ -165,7 +165,7 @@ module_description User CPU Usage (%)
module_min_warning 70
module_max_warning 90
module_min_critical 91
module_max_critical 100
module_max_critical 0
module_unit %
module_group System
module_end
@ -524,3 +524,9 @@ module_plugin "%PROGRAMFILES%\Pandora_Agent\util\autodiscover.exe" --default
#module_native_encoding OEM
#module_end
# Hardening plugin for security compliance analysis.
#module_begin
#module_plugin "%PROGRAMFILES%\Pandora_Agent\util\pandora_sca.exe"
#module_absoluteinterval 7d
#module_end

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:6d93bd9d56c938063045fa2093198d324746f84df2b74567648f3baebd635657
size 5248006

@ -3,7 +3,7 @@ AllowLanguageSelection
{Yes}
AppName
{Pandora FMS Windows Agent v7.0NG.772}
{Pandora FMS Windows Agent v7.0NG.773.3}
ApplicationID
{17E3D2CF-CA02-406B-8A80-9D31C17BD08F}
@ -186,7 +186,7 @@ UpgradeApplicationID
{}
Version
{230803}
{230906}
ViewReadme
{Yes}

@ -31,6 +31,10 @@ using namespace std;
* File operations.
*/
namespace Pandora_File {
/* Size of a buffer that will be passed to Pandora_File::md5. */
const int MD5_BUF_SIZE = 33;
/**
* File super-class exception.
*/

@ -19,11 +19,14 @@
*/
#include "pandora_module.h"
#include "pandora_windows_service.h"
#include "../misc/pandora_file.h"
#include "../pandora_strutils.h"
#include "../pandora.h"
#include <iostream>
#include <sstream>
#include <cmath>
#define BUFSIZE 4096
@ -472,18 +475,27 @@ Pandora_Module::setNoOutput () {
*/
void
Pandora_Module::run () {
/* Check the interval */
if (this->executions % this->intensive_interval != 0) {
// Run once.
if (this->intensive_interval == 0) {
if (this->executions == 0) {
has_output = false;
throw Interval_Not_Fulfilled ();
}
}
// Run periodically.
else if (++this->executions < this->intensive_interval) {
pandoraDebug ("%s: Interval is not fulfilled", this->module_name.c_str ());
this->executions++;
has_output = false;
throw Interval_Not_Fulfilled ();
}
/* Increment the executions after check. This is done to execute the
first time */
this->executions++;
// Reset the execution counter.
this->executions = 0;
has_output = true;
// Update the execution timestamp.
this->updateTimestampFile();
}
/**
@ -1663,6 +1675,63 @@ Pandora_Module::getTimestamp () {
return this->timestamp;
}
/**
* Sets the module timestamp file.
*
* @param file_name The name of the timestamp file.
*/
void
Pandora_Module::setTimestampFile (string file_name) {
this->timestamp_file = file_name;
}
/**
* Gets the module timestamp file.
*
* @return The name of the timestamp file.
*/
string
Pandora_Module::getTimestampFile () {
return this->timestamp_file;
}
/**
* Update the timestamp file with the current time.
*
*/
void
Pandora_Module::updateTimestampFile () {
try {
Pandora_File::writeFile(this->timestamp_file, std::to_string(std::time(NULL)));
} catch (...) {
/* Ignore errors. */
}
}
/**
* Initialize the module's internal execution counter.
*
*/
void
Pandora_Module::initExecutions () {
string timestamp;
try {
if (this->timestamp_file != "" && Pandora_File::readFile(this->timestamp_file, timestamp) != FILE_NOT_FOUND) {
// If the interval is 0, setting executions to 0 will prevent the module from running.
this->executions = this->intensive_interval == 0 ?
0 :
floor((1000.0 * (std::time(NULL) - strtoint(timestamp))) / Pandora_Windows_Service::getInstance()->getInterval());
return;
}
} catch (...) {
// Ignore errors.
}
// If the interval is 0, setting executions to any value != 0 will make the module run.
this->executions = this->intensive_interval == 0 ? 1 : this->intensive_interval;
}
/**
* Sets the value of intensive_match.
*

@ -171,6 +171,7 @@ namespace Pandora_Modules {
Cron *cron;
list<Condition *> *intensive_condition_list;
time_t timestamp;
string timestamp_file;
unsigned char intensive_match;
int intensive_interval;
string unit, custom_id, str_warning, str_critical;
@ -238,6 +239,7 @@ namespace Pandora_Modules {
bool getAsync ();
void setExecutions(long executions=0);
long getExecutions();
void initExecutions ();
virtual string getXml ();
@ -303,6 +305,9 @@ namespace Pandora_Modules {
int hasOutput ();
void setTimestamp (time_t timestamp);
time_t getTimestamp ();
void setTimestampFile (string file_name);
string getTimestampFile ();
void updateTimestampFile ();
void setIntensiveMatch (unsigned char intensive_match);
unsigned char getIntensiveMatch ();
bool isIntensive ();

@ -41,7 +41,10 @@
#include "pandora_module_snmpget.h"
#include "../windows/pandora_wmi.h"
#include "../pandora_strutils.h"
#include "../misc/pandora_file.h"
#include "../pandora.h"
#include <list>
#include <cmath>
using namespace Pandora;
using namespace Pandora_Modules;
@ -50,6 +53,7 @@ using namespace Pandora_Strutils;
#define TOKEN_NAME ("module_name ")
#define TOKEN_TYPE ("module_type ")
#define TOKEN_INTERVAL ("module_interval ")
#define TOKEN_ABSOLUTEINTERVAL ("module_absoluteinterval ")
#define TOKEN_EXEC ("module_exec ")
#define TOKEN_PROC ("module_proc ")
#define TOKEN_SERVICE ("module_service ")
@ -156,7 +160,8 @@ Pandora_Module_Factory::getModuleFromDefinition (string definition) {
list<string>::iterator iter;
string module_name, module_type, module_exec;
string module_min, module_max, module_description;
string module_interval, module_proc, module_service;
string module_interval, module_absoluteinterval;
string module_proc, module_service;
string module_freedisk, module_cpuusage, module_inventory;
string module_freedisk_percent, module_freememory_percent;
string module_dsn, module_freememory;
@ -196,6 +201,7 @@ Pandora_Module_Factory::getModuleFromDefinition (string definition) {
module_max = "";
module_description = "";
module_interval = "";
module_absoluteinterval = "";
module_exec = "";
module_proc = "";
module_service = "";
@ -290,6 +296,9 @@ Pandora_Module_Factory::getModuleFromDefinition (string definition) {
if (module_interval == "") {
module_interval = parseLine (line, TOKEN_INTERVAL);
}
if (module_absoluteinterval == "") {
module_absoluteinterval = parseLine (line, TOKEN_ABSOLUTEINTERVAL);
}
if (module_exec == "") {
module_exec = parseLine (line, TOKEN_EXEC);
}
@ -603,6 +612,13 @@ Pandora_Module_Factory::getModuleFromDefinition (string definition) {
}
}
if (module_absoluteinterval != "") {
pos_macro = module_absoluteinterval.find(macro_name);
if (pos_macro != string::npos){
module_absoluteinterval.replace(pos_macro, macro_name.size(), macro_value);
}
}
if (module_exec != "") {
pos_macro = module_exec.find(macro_name);
if (pos_macro != string::npos){
@ -1323,6 +1339,61 @@ Pandora_Module_Factory::getModuleFromDefinition (string definition) {
}
}
/* Set the module absolute interval */
if (module_absoluteinterval != "") {
int interval;
try {
service = Pandora_Windows_Service::getInstance();
// Run once.
if (module_absoluteinterval == "once") {
interval = 0;
}
// Seconds.
else if (module_absoluteinterval.back() == 's') {
interval = strtoint (module_absoluteinterval.substr(0, module_absoluteinterval.size() - 1));
}
// Minutes.
else if (module_absoluteinterval.back() == 'm') {
interval = strtoint (module_absoluteinterval.substr(0, module_absoluteinterval.size() - 1)) * 60;
}
// Hours.
else if (module_absoluteinterval.back() == 'h') {
interval = strtoint (module_absoluteinterval.substr(0, module_absoluteinterval.size() - 1)) * 3600;
}
// Days.
else if (module_absoluteinterval.back() == 'd') {
interval = strtoint (module_absoluteinterval.substr(0, module_absoluteinterval.size() - 1)) * 86400;
}
// Number of agent intervals.
else {
interval = strtoint(module_absoluteinterval) * (service->getIntervalSec());
}
// Convert from seconds to agent executions.
interval = ceil(interval / double(service->getIntervalSec()));
// Set the module interval.
module->setInterval (interval);
module->setIntensiveInterval (interval);
// Compute the MD5 hash of the module's name.
char module_name_md5[Pandora_File::MD5_BUF_SIZE];
Pandora_File::md5(module_name.c_str(), module_name.size(), module_name_md5);
// Set the timestamp file.
module->setTimestampFile(Pandora::getPandoraInstallDir().append("/ref/").append(module_name_md5).append(".ref"));
} catch (Invalid_Conversion e) {
pandoraLog ("Invalid absolute interval value \"%s\" for module %s",
module_absoluteinterval.c_str (),
module_name.c_str ());
}
catch (...) {
// Should not happen. Ignore errors.
}
}
/* Module intensive condition */
if (intensive_condition_list.size () > 0) {
intensive_condition_iter = intensive_condition_list.begin ();
@ -1337,6 +1408,9 @@ Pandora_Module_Factory::getModuleFromDefinition (string definition) {
module->setIntensiveInterval (module->getInterval () * (service->getInterval () / service->getIntensiveInterval ()));
}
/* Initialize the module's execution counter. */
module->initExecutions ();
/* Module cron */
module->setCron (module_crontab);
@ -1374,6 +1448,18 @@ Pandora_Module_Factory::getModuleFromDefinition (string definition) {
numeric = false;
}
// Make sure modules that run once are asynchronous.
if (module->getInterval() == 0) {
type = module->getTypeInt();
if (type == TYPE_GENERIC_DATA) {
module->setType("async_data");
} else if (type == TYPE_GENERIC_PROC) {
module->setType("async_proc");
} else if (type == TYPE_GENERIC_DATA_STRING) {
module->setType("async_string");
}
}
if (numeric) {
if (module_max != "") {
try {

@ -30,7 +30,7 @@ using namespace Pandora;
using namespace Pandora_Strutils;
#define PATH_SIZE _MAX_PATH+1
#define PANDORA_VERSION ("7.0NG.772 Build 230803")
#define PANDORA_VERSION ("7.0NG.773.3 Build 230906")
string pandora_path;
string pandora_dir;

@ -2197,6 +2197,11 @@ Pandora_Windows_Service::getInterval () {
return this->interval;
}
long
Pandora_Windows_Service::getIntervalSec () {
return this->interval_sec;
}
long
Pandora_Windows_Service::getIntensiveInterval () {
return this->intensive_interval;

@ -122,6 +122,7 @@ namespace Pandora {
Pandora_Agent_Conf *getConf ();
string getEHKey (string ehorus_conf);
long getInterval ();
long getIntervalSec ();
long getIntensiveInterval ();
string generateAgentName ();
bool writeToBuffer (string temporal);

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

@ -1,5 +1,5 @@
package: pandorafms-console
Version: 7.0NG.772-230803
Version: 7.0NG.773.3-230906
Architecture: all
Priority: optional
Section: admin

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

@ -261,12 +261,27 @@ function agents_modules_load_js()
}
function select_selected () {
// $('#id_agents2 option').each(function(){
// if($(this).attr('selected') === 'selected'){
// $(this).prop('selected', true);
// }
// });
var f = document.forms.filter_form;
f.action = "index.php?sec=view&sec2=extensions/agents_modules";
$('#filter_form').submit();
}
/* <![CDATA[ */
function export_csv() {
let group_id = $('#group_id option:selected').val();
let module_group_id = $('#modulegroup option:selected').val();
let agent_id = $('#id_agents2 option:selected').map((_, e) => e.value).get();
let module_id = $('#module option:selected').map((_, e) => e.value).get();
let filters_array = {group_id: group_id, module_group_id:module_group_id, agent_id:agent_id, module_id:module_id}
let jsonFilters = JSON.stringify(filters_array)
let filters = window.btoa(jsonFilters)
var f = document.forms.filter_form;
blockResubmit($(this));
f.action = "extensions/agents_modules_csv.php?get_agents_module_csv=1&filters="+filters;
$("#filter_form").submit();
}
/* ]]> */
</script>
<?php
}
@ -653,7 +668,7 @@ function mainAgentsModules()
}
if ($config['pure'] != 1) {
$show_filters = '<form method="post" action="index.php?sec=view&sec2=extensions/agents_modules" class="w100p">';
$show_filters = '<form id="filter_form" method="post" action="index.php?sec=view&sec2=extensions/agents_modules" class="w100p">';
$show_filters .= '<table class="filter-table-adv w100p no-border" cellpadding="4" cellspacing="4">';
$show_filters .= '<tr>';
$show_filters .= '<td width="33%">'.$filter_type.'</td>';
@ -679,6 +694,13 @@ function mainAgentsModules()
'onclick' => 'select_selected()',
],
true
).html_print_button(
__('Export to CSV'),
'srcbutton_csv',
false,
'export_csv()',
['class' => 'secondary mini'],
true,
),
],
true

@ -0,0 +1,118 @@
<?php
/**
* Export data.
*
* @category Tools
* @package Pandora FMS
* @subpackage Operation
* @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.
* ============================================================================
*/
global $config;
if (true) {
include_once '../include/config.php';
include_once '../include/functions_agents.php';
include_once '../include/functions_reporting.php';
include_once '../include/functions_modules.php';
include_once '../include/functions_users.php';
include_once $config['homedir'].'/include/config.php';
include_once $config['homedir'].'/include/functions_agents.php';
include_once $config['homedir'].'/include/functions_reporting.php';
include_once $config['homedir'].'/include/functions_modules.php';
include_once $config['homedir'].'/include/functions_users.php';
}
check_login();
// ACL Check.
if (! check_acl($config['id_user'], 0, 'AR')) {
db_pandora_audit(
AUDIT_LOG_ACL_VIOLATION,
'Trying to access Agent view (Grouped)'
);
include 'general/noaccess.php';
exit;
}
$get_agents_module_csv = get_parameter('get_agents_module_csv', 0);
if ($get_agents_module_csv === '1') {
// ***************************************************
// Header output
// ***************************************************
$config['ignore_callback'] = true;
while (@ob_end_clean()) {
}
$filename = 'agents_module_view_'.date('Ymd').'-'.date('His');
// Set cookie for download control.
setDownloadCookieToken();
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="'.$filename.'.csv"');
// ***************************************************
// Data processing
// ***************************************************
echo pack('C*', 0xEF, 0xBB, 0xBF);
$json_filters = get_parameter('filters', '');
$filters = json_decode(
base64_decode(
get_parameter('filters', '')
),
true
);
$results = export_agents_module_csv($filters);
$divider = $config['csv_divider'];
$dataend = PHP_EOL;
$header_fields = [
__('Agent'),
__('Module'),
__('Data'),
];
$out_csv = '';
foreach ($header_fields as $key => $value) {
$out_csv .= $value.$divider;
}
$out_csv .= "\n";
foreach ($results as $result) {
foreach ($result as $key => $value) {
$out_csv .= io_safe_output($value).$divider;
}
$out_csv .= "\n";
}
echo io_safe_output($out_csv);
exit;
}

@ -157,7 +157,6 @@ function extension_api_checker()
}
$url = io_safe_output(get_parameter('url', ''));
$ip = io_safe_output(get_parameter('ip', '127.0.0.1'));
$pandora_url = io_safe_output(get_parameter('pandora_url', $config['homeurl_static']));
$apipass = io_safe_output(get_parameter('apipass', ''));
@ -175,6 +174,17 @@ function extension_api_checker()
$api_execute = (bool) get_parameter('api_execute', false);
if ($url !== '') {
$validate_url = parse_url($url);
if ($validate_url['scheme'] === 'http' || $validate_url['scheme'] === 'https') {
ui_print_success_message(__('Request successfully processed'));
} else {
ui_print_error_message(__('Incorrect URL'));
$url = '';
$api_execute = false;
}
}
$return_call_api = '';
if ($api_execute === true) {
$return_call_api = api_execute(

@ -204,51 +204,60 @@ function files_repo_add_file($file_input_name='upfile', $description='', $groups
if ($upload_result === true) {
$filename = $_FILES[$file_input_name]['name'];
// Replace conflictive characters
$filename = str_replace([' ', '=', '?', '&'], '_', $filename);
$filename = filter_var($filename, FILTER_SANITIZE_URL);
// The filename should not be larger than 200 characters
if (mb_strlen($filename, 'UTF-8') > 200) {
$filename = mb_substr($filename, 0, 200, 'UTF-8');
}
$hash = '';
if ($public) {
$hash = md5(time().$config['dbpass']);
$hash = mb_substr($hash, 0, 8, 'UTF-8');
}
// Invalid extensions.
$extension = pathinfo($filename, PATHINFO_EXTENSION);
$invalid_extensions = '/^(php|php1|php2|php3|php4|php5|php7|php8|phar|phptml|phps)$/i';
$values = [
'name' => $filename,
'description' => $description,
'hash' => $hash,
];
$file_id = db_process_sql_insert('tfiles_repo', $values);
if (preg_match($invalid_extensions, $extension) === 0) {
// Replace conflictive characters
$filename = str_replace([' ', '=', '?', '&'], '_', $filename);
$filename = filter_var($filename, FILTER_SANITIZE_URL);
// The filename should not be larger than 200 characters
if (mb_strlen($filename, 'UTF-8') > 200) {
$filename = mb_substr($filename, 0, 200, 'UTF-8');
}
if ($file_id) {
$file_tmp = $_FILES[$file_input_name]['tmp_name'];
$destination = $files_repo_path.'/'.$file_id.'_'.$filename;
$hash = '';
if ($public) {
$hash = md5(time().$config['dbpass']);
$hash = mb_substr($hash, 0, 8, 'UTF-8');
}
if (move_uploaded_file($file_tmp, $destination)) {
if (is_array($groups) && !empty($groups)) {
db_process_sql_delete('tfiles_repo_group', ['id_file' => $file_id]);
foreach ($groups as $group) {
$values = [
'id_file' => $file_id,
'id_group' => $group,
];
db_process_sql_insert('tfiles_repo_group', $values);
$values = [
'name' => $filename,
'description' => $description,
'hash' => $hash,
];
$file_id = db_process_sql_insert('tfiles_repo', $values);
if ($file_id) {
$file_tmp = $_FILES[$file_input_name]['tmp_name'];
$destination = $files_repo_path.'/'.$file_id.'_'.$filename;
if (move_uploaded_file($file_tmp, $destination)) {
if (is_array($groups) && !empty($groups)) {
db_process_sql_delete('tfiles_repo_group', ['id_file' => $file_id]);
foreach ($groups as $group) {
$values = [
'id_file' => $file_id,
'id_group' => $group,
];
db_process_sql_insert('tfiles_repo_group', $values);
}
}
}
$result['status'] = true;
$result['status'] = true;
} else {
db_process_sql_delete('tfiles_repo', ['id' => $file_id]);
unlink($file_tmp);
$result['message'] = __('The file could not be copied');
}
} else {
db_process_sql_delete('tfiles_repo', ['id' => $file_id]);
unlink($file_tmp);
$result['message'] = __('The file could not be copied');
$result['message'] = __('There was an error creating the file');
}
} else {
$result['message'] = __('There was an error creating the file');
$result['message'] = __('File has an invalid extension');
}
} else {
$result['message'] = $upload_result;

@ -453,7 +453,7 @@ function resource_exportation_extension_main()
true
)
);
$table->data[0][] = html_print_button(__('Export'), '', false, 'export_to_ptr("report");', ['mode' => 'link'], true);
$table->data[0][] = html_print_button(__('Export'), '', false, 'export_to_ptr("report");', '', true);
$table->data[1][] = html_print_label_input_block(
__('Visual console'),
@ -465,7 +465,7 @@ function resource_exportation_extension_main()
true
)
);
$table->data[1][] = html_print_button(__('Export'), '', false, 'export_to_ptr("visual_console");', ['mode' => 'link'], 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);

@ -1702,4 +1702,9 @@ enterprise/meta/monitoring/wizard/wizard.module.network.php
enterprise/meta/monitoring/wizard/wizard.module.web.php
enterprise/meta/monitoring/wizard/wizard.php
enterprise/meta/monitoring/wizard/wizard.update_agent.php
enterprise/meta/monitoring/wizard/wizard.update_module.php
enterprise/meta/monitoring/wizard/wizard.update_module.php
enterprise/godmode/wizards/Applications.class.php
enterprise/godmode/wizards/Cloud.class.php
enterprise/images/wizard/applications.png
enterprise/images/wizard/cloud.png
enterprise/images/wizard/consoletasks.png

File diff suppressed because one or more lines are too long

@ -0,0 +1,47 @@
START TRANSACTION;
ALTER TABLE `ttrap` ADD COLUMN `utimestamp` INT UNSIGNED NOT NULL DEFAULT 0;
UPDATE ttrap SET utimestamp=UNIX_TIMESTAMP(timestamp);
CREATE TABLE IF NOT EXISTS `tgraph_analytics_filter` (
`id` INT NOT NULL auto_increment,
`filter_name` VARCHAR(45) NULL,
`user_id` VARCHAR(255) NULL,
`graph_modules` TEXT NULL,
`interval` INT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4;
UPDATE `twelcome_tip`
SET title = 'Scheduled&#x20;downtimes',
url = 'https://pandorafms.com/manual/en/documentation/04_using/11_managing_and_administration#scheduled_downtimes'
WHERE title = 'planned&#x20;stops';
UPDATE tagente_modulo SET `tcp_send` = '2c' WHERE `tcp_send` = '2';
UPDATE tpolicy_modules SET `tcp_send` = '2c' WHERE `tcp_send` = '2';
UPDATE tnetwork_component SET `tcp_send` = '2c' WHERE `tcp_send` = '2';
ALTER TABLE `tsesion_filter_log_viewer`
CHANGE COLUMN `date_range` `custom_date` INT NULL DEFAULT NULL ,
CHANGE COLUMN `start_date_defined` `date` VARCHAR(45) NULL DEFAULT NULL ,
CHANGE COLUMN `start_date_time` `date_text` VARCHAR(45) NULL DEFAULT NULL ,
CHANGE COLUMN `start_date_date` `date_units` VARCHAR(45) NULL DEFAULT NULL ,
CHANGE COLUMN `start_date_date_range` `date_init` VARCHAR(45) NULL DEFAULT NULL ,
CHANGE COLUMN `start_date_time_range` `time_init` VARCHAR(45) NULL DEFAULT NULL ,
CHANGE COLUMN `end_date_date_range` `date_end` VARCHAR(45) NULL DEFAULT NULL ,
CHANGE COLUMN `end_date_time_range` `time_end` VARCHAR(45) NULL DEFAULT NULL ;
ALTER TABLE `tsesion_filter`
CHANGE COLUMN `period` `date_text` VARCHAR(45) NULL DEFAULT NULL AFTER `user`;
ALTER TABLE `tsesion_filter`
ADD COLUMN `custom_date` INT NULL AFTER `user`,
ADD COLUMN `date` VARCHAR(45) NULL AFTER `custom_date`,
ADD COLUMN `date_units` VARCHAR(45) NULL AFTER `date_text`,
ADD COLUMN `date_init` VARCHAR(45) NULL AFTER `date_units`,
ADD COLUMN `time_init` VARCHAR(45) NULL AFTER `date_init`,
ADD COLUMN `date_end` VARCHAR(45) NULL AFTER `time_init`,
ADD COLUMN `time_end` VARCHAR(45) NULL AFTER `date_end`;
COMMIT;

@ -0,0 +1,81 @@
<?php
/**
* Static page to lock access to console
*
* @category Wizard
* @package Pandora FMS
* @subpackage Applications.VMware
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2021 Artica Soluciones Tecnologicas
* Please see http://pandorafms.org for full contribution list
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation for version 2.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* ============================================================================
*/
// Begin.
ui_require_css_file('maintenance');
?>
<html>
<body>
<div class="responsive center padding-6">
<p>
<?php
if (is_metaconsole() === true) {
echo __('You cannot use this metaconsole until merging process is finished');
} else {
echo __('You cannot use this console until merging process is finished');
}
?>
</p>
<br>
<br>
<?php
html_print_image(
'images/pandora_tinylogo.png',
false,
['class' => 'responsive flex margn']
);
html_print_image(
'images/maintenance.png',
false,
[
'class' => 'responsive',
'width' => 800,
]
);
?>
<br>
<br>
<p><?php echo __('You will be automatically redirected when all tasks finish'); ?></p>
</div>
</body>
<script type="text/javascript">
$(document).ready(function() {
setTimeout(
function() {
location.reload();
},
10000
);
})
</script>
</html>

@ -228,7 +228,9 @@ echo sprintf('<div id="header_table" class="header_table_%s">', $menuTypeClass);
);
$autorefresh_list = json_decode(
$select[0]['autorefresh_white_list']
(empty($select[0]['autorefresh_white_list']) === false)
? $select[0]['autorefresh_white_list']
: ''
);
$header_autorefresh = '';
@ -239,10 +241,10 @@ echo sprintf('<div id="header_table" class="header_table_%s">', $menuTypeClass);
&& array_search($_GET['sec2'], $autorefresh_list) !== false
) {
$do_refresh = true;
if ($_GET['sec2'] == 'operation/agentes/pandora_networkmap') {
if ((!isset($_GET['tab'])) || ($_GET['tab'] != 'view')) {
$do_refresh = false;
}
// Exception for network maps.
if ($_GET['sec2'] === 'operation/agentes/pandora_networkmap') {
$do_refresh = false;
}
if ($do_refresh) {
@ -364,59 +366,37 @@ echo sprintf('<div id="header_table" class="header_table_%s">', $menuTypeClass);
$header_autorefresh_counter .= '</div>';
}
// Button for feedback pandora.
if (enterprise_installed() && $config['activate_feedback']) {
$header_feedback = '<div id="feedback-icon-header">';
$header_feedback .= '<div id="modal-feedback-form" class="invisible"></div>';
$header_feedback .= '<div id="msg-header" class="invisible"></div>';
$header_feedback .= html_print_image(
'images/send_feedback@header.svg',
true,
[
'class' => 'main_menu_icon invert_filter',
'title' => __('Feedback'),
'id' => 'feedback-header',
'alt' => __('Feedback'),
'style' => 'cursor: pointer;',
]
);
$header_feedback .= '</div>';
}
// Support.
if (enterprise_installed()) {
$header_support_link = $config['custom_support_url'];
$modal_box = '<div id="modal_help" class="invisible">
<div id="modal-feedback-form" class="invisible"></div>
<div id="msg-header" class="invisible"></div>
<a href="https://pandorafms.com/manual" target="_blank">'.__('Pandora documentation').'</a>';
if (enterprise_installed() === true) {
$modal_box .= '<a href="https://support.pandorafms.com/" target="_blank">'.__('Enterprise support ').'</a>';
$modal_box .= '<a href="#" id="feedback-header">'.__('Give us feedback').'</a>';
} else {
$header_support_link = 'https://pandorafms.com/forums/';
$modal_box .= '<a href="https://pandorafms.com/community/forums/" target="_blank">'.__('Community Support').'</a>';
}
$header_support = '<div id="header_support">';
$header_support .= '<a href="'.ui_get_full_external_url($header_support_link).'" target="_blank">';
$header_support .= html_print_image(
'images/support@header.svg',
true,
[
'title' => __('Go to support'),
'class' => 'main_menu_icon bot invert_filter',
'alt' => 'user',
]
);
$header_support .= '</a></div>';
$modal_box .= '<hr class="separator" />';
$modal_box .= '<a href="https://github.com/pandorafms/pandorafms/issues" target="_blank">'.__('Open an issue in Github').'</a>';
$modal_box .= '<a href="https://discord.com/invite/xVt2ruSxmr" target="_blank">'.__('Join discord community').'</a>';
$modal_box .= '</div>';
// Documentation.
$header_docu = '<div id="header_docu">';
$header_docu .= '<a href="'.ui_get_full_external_url($config['custom_docs_url']).'" target="_blank">';
$header_docu .= html_print_image(
'images/documentation@header.svg',
true,
$modal_help = html_print_div(
[
'title' => __('Go to documentation'),
'class' => 'main_menu_icon bot invert_filter',
'alt' => 'user',
]
'id' => 'modal-help-content',
'content' => html_print_image(
'images/help@header.svg',
true,
[
'title' => __('Help'),
'class' => 'main_menu_icon bot invert_filter',
'alt' => 'user',
]
).$modal_box,
],
true,
);
$header_docu .= '</a></div>';
// User.
@ -470,11 +450,11 @@ echo sprintf('<div id="header_table" class="header_table_%s">', $menuTypeClass);
echo '</span>';
echo '</div>';
echo '<div class="header_center"></div>';
echo '<div class="header_right">'.$header_support, $header_docu, $header_user, $header_logout.'</div>';
echo '<div class="header_right">'.$modal_help, $header_user, $header_logout.'</div>';
} else {
echo '<div class="header_left"><span class="header_title">'.$config['custom_title_header'].'</span><span class="header_subtitle">'.$config['custom_subtitle_header'].'</span></div>
<div class="header_center">'.$header_searchbar.'</div>
<div class="header_right">'.$header_autorefresh, $header_autorefresh_counter, $header_discovery, $header_welcome, $servers_list, $header_feedback, $header_support, $header_docu, $header_user, $header_logout.'</div>';
<div class="header_right">'.$header_autorefresh, $header_autorefresh_counter, $header_discovery, $header_welcome, $servers_list, $modal_help, $header_user, $header_logout.'</div>';
}
?>
</div> <!-- Closes #table_header_inner -->
@ -552,6 +532,54 @@ echo sprintf('<div id="header_table" class="header_table_%s">', $menuTypeClass);
element.style.display = "none"
}
function notifications_clean_all() {
let wrapper_inner = document.getElementById('notification-wrapper-inner');
while (wrapper_inner.firstChild) {
wrapper_inner.removeChild(wrapper_inner.firstChild);
}
}
function mark_all_notification_as_read() {
jQuery.post ("ajax.php",
{
"page" : "godmode/setup/setup_notifications",
"mark_all_notification_as_read" : 1
},
function (data, status) {
notifications_clean_all();
location.reload();
},
"json"
)
.fail(function(xhr, textStatus, errorThrown){
console.error(
"Failed to mark al notification as read. Error: ",
xhr.responseText
);
});
}
function filter_notification() {
let notification_type = '';
$('.notification-item').hide();
$(".checkbox_filter_notifications:checkbox:checked").each(function() {
notification_type = $(this).val();
console.log(notification_type);
$('.notification-item[value='+notification_type+']').show();
if (notification_type == 'All'){
$('.notification-item').show();
}
});
if (notification_type == 'All'){
$('.notification-item').show();
}
if (notification_type == ''){
$('.notification-item').hide();
}
}
function click_on_notification_toast(event) {
var match = /notification-(.*)-id-([0-9]+)/.exec(event.target.id);
if (!match) {
@ -958,8 +986,6 @@ echo sprintf('<div id="header_table" class="header_table_%s">', $menuTypeClass);
<?php if (enterprise_installed()) { ?>
// Feedback.
$("#feedback-header").click(function () {
// Clean DOM.
$("#feedback-header").empty();
// Function charge Modal.
show_feedback();
});
@ -1065,6 +1091,22 @@ echo sprintf('<div id="header_table" class="header_table_%s">', $menuTypeClass);
return false;
});
$(document).click(function(event) {
if (!$(event.target).closest('#modal-help-content').length &&
$('#modal_help').hasClass('invisible') === false) {
$('#modal_help').addClass('invisible');
}
});
$('#modal-help-content').on('click', (e) => {
if($(e.target).prop('tagName') === 'A') {
$('#modal_help').addClass('invisible');
} else {
$('#modal_help').removeClass('invisible');
}
});
});
/* ]]> */
</script>

@ -30,7 +30,7 @@ require_once __DIR__.'/../include/functions_html.php';
echo '<style>
:root {';
if ($config['style'] === 'pandora') {
echo '--login-background-color: rgba(255, 255, 255, 0.4);';
echo '--login-background-color: rgba(255, 255, 255, 0.50);';
echo '--login-label-color: #545454;';
echo '--login-text-color: #000;';
$style_theme = 'white-theme';
@ -237,16 +237,18 @@ if (is_metaconsole() === true) {
);
}
} else if (file_exists(ENTERPRISE_DIR.'/load_enterprise.php')) {
$theme_logo = ($config['style'] === 'pandora') ? 'images/custom_logo_login/Pandora FMS alt black.png' : 'enterprise/images/custom_logo_login/'.$config['custom_logo_login'];
if (!isset($config['custom_logo_login'])) {
html_print_image(ui_get_full_url('enterprise/images/custom_logo_login/Pandora-FMS-1.png'), false, ['class' => 'login_logo', 'alt' => 'logo', 'border' => 0, 'title' => $logo_title], false, true);
html_print_image(ui_get_full_url($theme_logo), false, ['class' => 'login_logo', 'alt' => 'logo', 'border' => 0, 'title' => $logo_title], false, true);
} else {
html_print_image(ui_get_full_url('enterprise/images/custom_logo_login/'.$config['custom_logo_login']), false, ['class' => 'login_logo', 'alt' => 'logo', 'border' => 0, 'title' => $logo_title], false, true);
html_print_image(ui_get_full_url($theme_logo), false, ['class' => 'login_logo', 'alt' => 'logo', 'border' => 0, 'title' => $logo_title], false, true);
}
} else {
$theme_logo = ($config['style'] === 'pandora') ? 'images/custom_logo_login/Pandora FMS alt black.png' : 'images/custom_logo_login/'.$config['custom_logo_login'];
if (empty($config['custom_logo_login']) === true) {
html_print_image(ui_get_full_url('images/custom_logo_login/Pandora-FMS-1.png'), false, ['class' => 'login_logo', 'alt' => 'logo', 'border' => 0, 'title' => $logo_title], false, true);
html_print_image(ui_get_full_url($theme_logo), false, ['class' => 'login_logo', 'alt' => 'logo', 'border' => 0, 'title' => $logo_title], false, true);
} else {
html_print_image(ui_get_full_url('images/custom_logo_login/').$config['custom_logo_login'], false, ['class' => 'login_logo', 'alt' => 'logo', 'border' => 0, 'title' => $logo_title], false, true);
html_print_image(ui_get_full_url($theme_logo), false, ['class' => 'login_logo', 'alt' => 'logo', 'border' => 0, 'title' => $logo_title], false, true);
}
}

@ -259,6 +259,8 @@ if (!empty($news)) {
$output_news .= '</div></div>';
} else {
$text = str_replace('<script', '&lt;script', $text);
$text = str_replace('</script', '&lt;/script', $text);
$output_news .= nl2br($text);
}

@ -488,4 +488,10 @@ echo '</div>';
return height_logo + height_tabs + padding_menu + height_position;
}
});
<?php
if (get_user_language($config['id_user']) == 'es') {
?>
$('#icon_god-extensions').find('span').attr('style', 'white-space: nowrap;');
<?php } ?>
</script>

@ -946,7 +946,7 @@ foreach ($fields as $field) {
// Filling the data.
$combo = [];
$combo = $field['combo_values'];
$combo = explode(',', $combo);
$combo = explode(',', (empty($combo) === true) ? '' : $combo);
$combo_values = [];
foreach ($combo as $value) {
$combo_values[$value] = $value;

@ -217,7 +217,9 @@ if ($create_agent) {
$id_os = (int) get_parameter_post('id_os');
$os_version = (string) get_parameter_post('os_version');
$disabled = (int) get_parameter_post('disabled');
$custom_id = (string) get_parameter_post('custom_id', '');
$custom_id_safe_output = strip_tags(io_safe_output(get_parameter('custom_id', '')));
$custom_id = io_safe_input(trim(preg_replace('/[\/\\\|%#&$]/', '', $custom_id_safe_output)));
// $custom_id = (string) get_parameter_post('custom_id', '');
$cascade_protection = (int) get_parameter_post('cascade_protection', 0);
$cascade_protection_module = (int) get_parameter_post('cascade_protection_module', 0);
$safe_mode = (int) get_parameter_post('safe_mode', 0);
@ -1002,7 +1004,9 @@ if ($update_agent) {
$disabled = (bool) get_parameter_post('disabled');
$server_name = (string) get_parameter_post('server_name', '');
$id_parent = (int) get_parameter_post('id_agent_parent');
$custom_id = (string) get_parameter_post('custom_id', '');
$custom_id_safe_output = strip_tags(io_safe_output(get_parameter('custom_id', '')));
$custom_id = io_safe_input(trim(preg_replace('/[\/\\\|%#&$]/', '', $custom_id_safe_output)));
// $custom_id = (string) get_parameter_post('custom_id', '');
$cascade_protection = (int) get_parameter_post('cascade_protection', 0);
$cascade_protection_module = (int) get_parameter('cascade_protection_module', 0);
$safe_mode_module = (int) get_parameter('safe_mode_module', 0);
@ -1476,13 +1480,13 @@ if ($update_module === true || $create_module === true) {
$plugin_pass = io_input_password(
(string) get_parameter('snmp3_auth_pass')
);
$plugin_parameter = (string) get_parameter('snmp3_auth_method');
$plugin_parameter = (string) get_parameter('snmp3_auth_method', 'MD5');
$custom_string_1 = (string) get_parameter('snmp3_privacy_method');
$custom_string_1 = (string) get_parameter('snmp3_privacy_method', 'DES');
$custom_string_2 = io_input_password(
(string) get_parameter('snmp3_privacy_pass')
);
$custom_string_3 = (string) get_parameter('snmp3_security_level');
$custom_string_3 = (string) get_parameter('snmp3_security_level', 'noAuthNoPriv');
} else if ($id_module_type >= 34 && $id_module_type <= 37) {
$tcp_send = (string) get_parameter('command_text');
$custom_string_1 = (string) get_parameter(
@ -1763,7 +1767,10 @@ if ($update_module) {
];
if ($id_module_type == 30 || $id_module_type == 31 || $id_module_type == 32 || $id_module_type == 33) {
if ($id_module_type === 30 || $id_module_type === 31
|| $id_module_type === 32 || $id_module_type === 33
|| $id_module_type === 38
) {
$plugin_parameter_split = explode('&#x0a;', $values['plugin_parameter']);
$values['plugin_parameter'] = '';
@ -1959,7 +1966,10 @@ if ($create_module) {
'warning_time' => $warning_time,
];
if ($id_module_type === 30 || $id_module_type === 31 || $id_module_type === 32 || $id_module_type === 33) {
if ($id_module_type === 30 || $id_module_type === 31
|| $id_module_type === 32 || $id_module_type === 33
|| $id_module_type === 38
) {
$plugin_parameter_split = explode('&#x0a;', $values['plugin_parameter']);
$values['plugin_parameter'] = '';

@ -459,10 +459,10 @@ if ($id_agent_module) {
$snmp_version = 1;
$snmp3_auth_user = '';
$snmp3_auth_pass = '';
$snmp3_auth_method = '';
$snmp3_privacy_method = '';
$snmp3_auth_method = 'MD5';
$snmp3_privacy_method = 'DES';
$snmp3_privacy_pass = '';
$snmp3_security_level = '';
$snmp3_security_level = 'noAuthNoPriv';
// For Remote CMD.
$command_text = '';

@ -407,8 +407,7 @@ if ($edit_module === true) {
$help_header = 'local_module';
}
if ($id_module_type === 6 || $id_module_type === 7
) {
if ($id_module_type === 6 || $id_module_type === 7) {
$help_header = 'icmp_module_tab';
}
@ -420,7 +419,7 @@ if ($edit_module === true) {
$help_header = 'tcp_module_tab';
}
if ($id_module_type >= 30 && $id_module_type <= 33) {
if (($id_module_type >= 30 && $id_module_type <= 33) || $id_module_type === 38) {
$help_header = 'webserver_module_tab';
}
}

@ -233,7 +233,6 @@ if ($adopt === false) {
}
$snmp_versions['1'] = 'v. 1';
$snmp_versions['2'] = 'v. 2';
$snmp_versions['2c'] = 'v. 2c';
$snmp_versions['3'] = 'v. 3';
@ -406,7 +405,22 @@ push_table_simple($data, 'field_snmpv3_row1');
$data = [];
$data[0] = __('Privacy method');
$data[1] = html_print_select(['DES' => __('DES'), 'AES' => __('AES')], 'snmp3_privacy_method', $snmp3_privacy_method, '', '', '', true, false, false, '', $disabledBecauseInPolicy);
$data[1] = html_print_select(
[
'DES' => __('DES'),
'AES' => __('AES'),
],
'snmp3_privacy_method',
$snmp3_privacy_method,
'',
'',
'',
true,
false,
false,
'',
$disabledBecauseInPolicy
);
$data[2] = __('Privacy pass').ui_print_help_tip(__('The pass length must be eight character minimum.'), true);
$data[3] = html_print_input_password(
'snmp3_privacy_pass',

@ -1558,7 +1558,7 @@ function insert_downtime_agent($id_downtime, $user_groups_ad)
$all_modules = true;
}
if ($all_common_modules === true) {
if ($all_common_modules === true || $all_modules === true) {
$module_names = explode(',', get_parameter('all_common_modules'));
}
@ -1602,7 +1602,7 @@ function insert_downtime_agent($id_downtime, $user_groups_ad)
foreach ($agents as $agent_id) {
$agent_id = (int) $agent_id;
// Check module belongs to the agent.
if ($modules_selection_mode == 'all' && $all_modules === false) {
if ($modules_selection_mode == 'all' && ($all_modules === false || $all_modules === true)) {
$check = false;
foreach ($module_names as $module_name) {
$check_module = modules_get_agentmodule_id(
@ -1666,7 +1666,7 @@ function insert_downtime_agent($id_downtime, $user_groups_ad)
);
}
if ($result !== false && (bool) $all_modules === false) {
if ($result !== false && ((bool) $all_modules === false || (bool) $all_modules === true)) {
foreach ($module_names as $module_name) {
$module = modules_get_agentmodule_id(
$module_name,

@ -89,7 +89,7 @@ if (is_ajax() === true) {
[
'id' => 'agent_modules_affected_planned_downtime',
'class' => 'info_table',
'style' => 'width: 100%',
'style' => 'width: 99%',
'columns' => $columns,
'column_names' => $column_names,
'ajax_url' => 'godmode/agentes/planned_downtime.list',
@ -730,7 +730,7 @@ if ($downtimes === false && $filter_performed === false) {
$table->cellstyle = [];
$table->head = [];
$table->head['name'] = __('Name #Ag.');
$table->head['name'] = __('Name (Ag.)');
$table->head['description'] = __('Description');
$table->head['group'] = __('Group');
$table->head['type'] = __('Type');

@ -97,7 +97,7 @@ if (is_ajax()) {
if (!empty($field_description)) {
// If the value is 5, this because severity in snmp alerts is not permit to show.
if (($i > 5) && ($command['id'] == 3)) {
if (($i > 5) && ($command['id'] === 3)) {
$fdesc = $field_description.' <br><span class="normal xx-small">'.sprintf(
__('Field %s'),
($i - 1)
@ -118,7 +118,7 @@ if (is_ajax()) {
}
} else {
// If the macro hasn't description and doesnt appear in command, set with empty description to dont show it.
if (($i > 5) && ($command['id'] == 3)) {
if (($i > 5) && ($command['id'] === 3)) {
if (substr_count($command['command'], '_field'.($i - 1).'_') > 0) {
$fdesc = sprintf(__('Field %s'), ($i - 1));
} else {
@ -725,17 +725,17 @@ if ($copy_command) {
$is_management_allowed = is_management_allowed();
if ($is_management_allowed === false) {
if (is_metaconsole() === false) {
$url = '<a target="_blank" href="'.ui_get_meta_url(
$url_redirect = '<a target="_blank" href="'.ui_get_meta_url(
'index.php?sec=advanced&sec2=godmode/alerts/alert_commands&tab=command&pure=0'
).'">'.__('metaconsole').'</a>';
} else {
$url = __('any node');
$url_redirect = __('any node');
}
ui_print_warning_message(
__(
'This node is configured with centralized mode. All alert commands information is read only. Go to %s to manage it.',
$url
$url_redirect
)
);
}
@ -807,12 +807,12 @@ foreach ($commands as $command) {
// (IMPORTANT, DO NOT CHANGE!) only users with permissions over "All" group have access to edition of commands belonging to "All" group.
if ($is_management_allowed === true && !$command['internal'] && check_acl_restricted_all($config['id_user'], $command['id_group'], 'LM')) {
if (is_user_admin($config['id_user']) === true) {
$data['action'] = '<span class="inline_flex">';
$data['action'] = '<span class="inline_flex">';
$data['action'] .= '<a href="index.php?sec='.$sec.'&sec2=godmode/alerts/alert_commands&amp;copy_command=1&id='.$command['id'].'&pure='.$pure.'&offset='.$offset.'"
onClick="if (!confirm(\''.__('Are you sure?').'\')) return false;">'.html_print_image('images/copy.svg', true, ['class' => 'main_menu_icon invert_filter']).'</a>';
onClick="if (!confirm(\''.__('Are you sure?').'\')) return false;">'.html_print_image('images/copy.svg', true, ['class' => 'main_menu_icon invert_filter ', 'title' => 'Duplicate']).'</a>';
$data['action'] .= '<a href="index.php?sec='.$sec.'&sec2=godmode/alerts/alert_commands&delete_command=1&id='.$command['id'].'&pure='.$pure.'&offset='.$offset_delete.'"
onClick="if (!confirm(\''.__('Are you sure?').'\')) return false;">'.html_print_image('images/delete.svg', true, ['class' => 'main_menu_icon invert_filter']).'</a>';
onClick="if (!confirm(\''.__('Are you sure?').'\')) return false;">'.html_print_image('images/delete.svg', true, ['class' => 'main_menu_icon invert_filter', 'title' => 'Delete']).'</a>';
$data['action'] .= '</span>';
}
}

@ -912,7 +912,10 @@ foreach ($simple_alerts as $alert) {
1,
'padding:0px; width: 22px; height: 22px;',
true,
['class' => 'invert_filter main_menu_icon']
[
'class' => 'invert_filter main_menu_icon',
'title' => __('Enable'),
]
);
$data[4] .= html_print_input_hidden('enable_alert', 1, true);
} else {
@ -922,7 +925,10 @@ foreach ($simple_alerts as $alert) {
1,
'padding:0px; width: 22px; height: 22px;',
true,
['class' => 'main_menu_icon']
[
'class' => 'invert filter main_menu_icon',
'title' => __('Disable'),
]
);
$data[4] .= html_print_input_hidden('disable_alert', 1, true);
}
@ -940,7 +946,10 @@ foreach ($simple_alerts as $alert) {
1,
'padding:0px; width: 22px; height: 22px;',
true,
['class' => 'invert_filter main_menu_icon']
[
'class' => 'invert_filter main_menu_icon',
'title' => __('Standby off'),
]
);
$data[4] .= html_print_input_hidden('standbyon_alert', 1, true);
} else {
@ -950,7 +959,10 @@ foreach ($simple_alerts as $alert) {
1,
'padding:0px; width: 22px; height: 22px;',
true,
['class' => 'invert_filter main_menu_icon']
[
'class' => 'invert_filter main_menu_icon',
'title' => __('Standby on'),
]
);
$data[4] .= html_print_input_hidden('standbyoff_alert', 1, true);
}
@ -1139,8 +1151,7 @@ if (! $id_agente) {
return false;
});
$("input[name=disable]").attr ("title", "<?php echo __('Disable'); ?>")
.hover (function () {
$("input[name=disable]").hover (function () {
$(this).attr ("src",
<?php
echo '"'.html_print_image(
@ -1166,8 +1177,7 @@ if (! $id_agente) {
}
);
$("input[name=enable]").attr ("title", "<?php echo __('Enable'); ?>")
.hover (function () {
$("input[name=enable]").hover (function () {
$(this).attr ("src",
<?php
echo '"'.html_print_image(
@ -1193,8 +1203,7 @@ if (! $id_agente) {
}
);
$("input[name=standby_on]").attr ("title", "<?php echo __('Set off standby'); ?>")
.hover (function () {
$("input[name=standby_on]").hover (function () {
$(this).attr ("src",
<?php
echo '"'.html_print_image(
@ -1220,8 +1229,7 @@ if (! $id_agente) {
}
);
$("input[name=standby_off]").attr ("title", "<?php echo __('Set standby'); ?>")
.hover (function () {
$("input[name=standby_off]").hover (function () {
$(this).attr ("src",
<?php
echo '"'.html_print_image(

@ -262,7 +262,7 @@ $data[1] = '';
$table_conditions->data[] = $data;
$data[0] = __('Use special days list');
$data[1] = (isset($alert['special_day']) && $alert['special_day'] == 1) ? __('Yes') : __('No');
$data[1] = (isset($template['special_day']) && (int) $template['special_day'] !== 0) ? __('Yes') : __('No');
$table_conditions->data[] = $data;
$data[0] = __('Time threshold');
@ -678,6 +678,23 @@ ui_require_javascript_file('pandora_fullcalendar');
<script language="javascript" type="text/javascript">
$(document).ready (function () {
$('li#icon_oper-agents').addClass('selected');
$('ul#subicon_oper-agents').show();
$('#title_menu').children().last().removeClass('arrow_menu_down');
$('#title_menu').children().last().addClass('arrow_menu_up');
$('#title_menu').children().first().next().addClass('span_selected');
$('li#Views').show();
$('li#Views').children().first().children().last().removeClass('arrow_menu_down');
$('li#Views').children().first().children().last().addClass('arrow_menu_up');
$('li#Views').children().first().children().first().addClass('span_selected');
$('li#Views').addClass('submenu_selected');
$('li#Views').removeClass('submenu_not_selected');
$('ul#subViews').show();
var parent = $('div[title="Alert details"]').parent().parent();
parent.addClass('selected');
$('.sub_subMenu.selected').prepend(`<div class="element_submenu_selected left_3"></div>`);
var calendarEl = document.getElementById('calendar_map');
if(calendarEl){
var eventsBBDD = $("#hidden-schedule").val();

@ -0,0 +1,284 @@
<?php
/**
* Extension to manage a list of gateways and the node address where they should
* point to.
*
* @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.
* ============================================================================
*/
check_login();
if (! check_acl($config['id_user'], 0, 'AW')) {
db_pandora_audit(
AUDIT_LOG_ACL_VIOLATION,
'Trying to access massive alert deletion'
);
include 'general/noaccess.php';
return;
}
enterprise_include_once('include/functions_policies.php');
if (is_ajax() === true) {
$load_policies = get_parameter('load_policies', 0);
$load_alerts_policies = get_parameter('load_alerts_policies', 0);
if ($load_policies) {
$id_group = get_parameter('id_group', 0);
if ($id_group !== '0') {
$filter['force_id_group'] = $id_group;
$arr_policies = policies_get_policies($filter);
} else {
$arr_policies = policies_get_policies();
}
$policies = [];
foreach ($arr_policies as $row) {
$policies[$row['id']] = $row['name'];
}
echo json_encode($policies, true);
return;
}
if ($load_alerts_policies) {
$ids_policies = get_parameter('policies', []);
$alerts = [];
foreach ($ids_policies as $policie) {
foreach (policies_get_alerts($policie, ['id_policy_module' => '<>0']) as $row) {
$alerts[$row['id']] = io_safe_output(alerts_get_alert_template_name($row['id_alert_template']).' - '.policies_get_module_name($row['id_policy_module']));
}
}
echo json_encode($alerts, true);
return;
}
}
$add = (bool) get_parameter_post('add');
if ($add) {
$array_alerts = (array) get_parameter('id_alerts');
$array_actions = (array) get_parameter('action');
$fires_min = (int) get_parameter('fires_min', 0);
$fires_max = (int) get_parameter('fires_max', 0);
if (empty($array_alerts) === false) {
foreach ($array_alerts as $id_alert) {
foreach ($array_actions as $action) {
$id_policy_alert = db_get_value('id_policy_alert', 'tpolicy_alerts_actions', 'id', $action);
$result = policies_add_action_alert($id_alert, $action, $fires_min, $fires_max);
}
}
ui_print_result_message($result, __('Add action successfully'), __('Could not be added'), '');
}
}
$table = new stdClass();
$table->id = 'add_table';
$table->class = 'databox filters filter-table-adv';
$table->width = '100%';
$table->data = [];
$table->style = [];
$table->style[0] = 'font-weight: bold; vertical-align:top';
$table->style[2] = 'font-weight: bold; vertical-align:top';
$table->size = [];
$table->size[0] = '50%';
$table->size[1] = '50%';
$table->data = [];
$table->data[0][0] = html_print_label_input_block(
__('Group'),
html_print_select_groups(
false,
'AW',
true,
'id_group',
0,
'',
'All',
0,
true,
false,
true,
'',
false,
'width:100%;'
)
);
$table->data[0][1] = html_print_label_input_block(
__('Group recursion'),
html_print_checkbox('recursion', 1, $recursion, true, false, '', true)
);
$arr_policies = policies_get_policies();
$policies = [];
foreach ($arr_policies as $row) {
$policies[$row['id']] = $row['name'];
}
$table->data[1][0] = html_print_label_input_block(
__('Policies'),
html_print_select(
$policies,
'id_policies[]',
'',
'',
'',
'',
true,
true,
true,
'',
false,
'width:100%;'
)
);
$table->data[1][1] = html_print_label_input_block(
__('Alerts'),
html_print_select(
[],
'id_alerts[]',
'',
'',
'',
'',
true,
true,
true,
'',
false,
'width:100%;'
)
);
$actions = alerts_get_alert_actions();
$table->data[2][0] = html_print_label_input_block(
__('Action'),
html_print_select(
$actions,
'action[]',
'',
'',
'',
'',
true,
true,
true,
'w100p',
false,
'width:100%'
)
);
$table->data[2][1] = html_print_label_input_block(
__('Number of matching alerts'),
'<div>'.html_print_input_text('fires_min', 0, '', false, 10, true, false, false, '', 'w30p').'<span class="margin-lr-10">'.__('to').'</span>'.html_print_input_text('fires_max', 0, '', false, 10, true, false, false, '', 'w30p').'</div>'
);
echo '<form method="post" id="form_alerts" action="index.php?sec=gmassive&sec2=godmode/massive/massive_operations&option=add_alerts">';
html_print_table($table);
attachActionButton('add', 'add', $table->width, false, $SelectAction);
echo '</form>';
?>
<script type="text/javascript">
var limit_parameters_massive = <?php echo $config['limit_parameters_massive']; ?>;
$(document).ready (function () {
$('#id_group').change(function(){
var data = $(this).val();
$.ajax({
type: "POST",
url: "ajax.php",
data: {
page: 'godmode/massive/massive_add_policies_alerts',
load_policies: 1,
id_group: data,
},
success: function(data) {
var data = $.parseJSON(data);
var options = '';
$.each( data, function( id, name ) {
options += '<option value="'+id+'">'+name+'</option>';
});
if (options!== ''){
$('#id_policies').html(options);
} else {
$('#id_policies').html('<option value="0"><?php echo __('None'); ?></option>');
}
$('#id_policies').trigger('change');
}
});
});
$('#id_policies').change(function(){
var data = $(this).val();
$.ajax({
type: "POST",
url: "ajax.php",
data: {
page: 'godmode/massive/massive_add_policies_alerts',
load_alerts_policies: 1,
policies: data,
},
success: function(data) {
var data = $.parseJSON(data);
var options = '';
$.each( data, function( id, name ) {
options += '<option value="'+id+'">'+name+'</option>';
});
if (options!== ''){
$('#id_alerts').html(options);
} else {
$('#id_alerts').html('<option value="0"><?php echo __('None'); ?></option>');
}
}
});
})
$("form").submit(function(e){
var id_policies = $('#id_policies :selected').val();
var id_alerts = $('#id_alerts :selected').val();
var action = $('#action :selected').val();
if ($.isEmptyObject(id_policies) || $.isEmptyObject(id_alerts) || $.isEmptyObject(action) || id_policies === '0' || id_alerts === '0'){
e.preventDefault();
alert('<?php echo __('Policies, Alerts and Action must to be selected'); ?>');
}
})
});
</script>

@ -0,0 +1,288 @@
<?php
/**
* Extension to manage a list of gateways and the node address where they should
* point to.
*
* @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.
* ============================================================================
*/
check_login();
if (! check_acl($config['id_user'], 0, 'AW')) {
db_pandora_audit(
AUDIT_LOG_ACL_VIOLATION,
'Trying to access massive alert deletion'
);
include 'general/noaccess.php';
return;
}
enterprise_include_once('include/functions_policies.php');
if (is_ajax() === true) {
$load_policies = get_parameter('load_policies', 0);
$load_alerts_policies = get_parameter('load_alerts_policies', 0);
if ($load_policies) {
$id_group = get_parameter('id_group', 0);
if ($id_group !== '0') {
$filter['force_id_group'] = $id_group;
$arr_policies = policies_get_policies($filter);
} else {
$arr_policies = policies_get_policies();
}
$policies = [];
foreach ($arr_policies as $row) {
$policies[$row['id']] = $row['name'];
}
echo json_encode($policies, true);
return;
}
if ($load_alerts_policies) {
$ids_policies = get_parameter('policies', []);
$alerts = [];
foreach ($ids_policies as $policie) {
$array_alerts = policies_get_alerts(
$policie,
['id_policy_module' => '0']
);
foreach ($array_alerts as $row) {
$alerts[$row['id']] = io_safe_output(alerts_get_alert_template_name($row['id_alert_template']).' - '.$row['name_extern_module']);
}
}
echo json_encode($alerts, true);
return;
}
}
$add = (bool) get_parameter_post('add');
if ($add) {
$array_alerts = (array) get_parameter('id_alerts');
$array_actions = (array) get_parameter('action');
$fires_min = (int) get_parameter('fires_min', 0);
$fires_max = (int) get_parameter('fires_max', 0);
if (empty($array_alerts) === false) {
foreach ($array_alerts as $id_alert) {
foreach ($array_actions as $action) {
$id_policy_alert = db_get_value('id_policy_alert', 'tpolicy_alerts_actions', 'id', $action);
$result = policies_add_action_alert($id_alert, $action, $fires_min, $fires_max);
}
}
ui_print_result_message($result, __('Add action successfully'), __('Could not be added'), '');
}
}
$table = new stdClass();
$table->id = 'add_table';
$table->class = 'databox filters filter-table-adv';
$table->width = '100%';
$table->data = [];
$table->style = [];
$table->style[0] = 'font-weight: bold; vertical-align:top';
$table->style[2] = 'font-weight: bold; vertical-align:top';
$table->size = [];
$table->size[0] = '50%';
$table->size[1] = '50%';
$table->data = [];
$table->data[0][0] = html_print_label_input_block(
__('Group'),
html_print_select_groups(
false,
'AW',
true,
'id_group',
0,
'',
'All',
0,
true,
false,
true,
'',
false,
'width:180px;'
)
);
$table->data[0][1] = html_print_label_input_block(
__('Group recursion'),
html_print_checkbox('recursion', 1, $recursion, true, false, '', true)
);
$arr_policies = policies_get_policies();
$policies = [];
foreach ($arr_policies as $row) {
$policies[$row['id']] = $row['name'];
}
$table->data[1][0] = html_print_label_input_block(
__('Policies'),
html_print_select(
$policies,
'id_policies[]',
'',
'',
'',
'',
true,
true,
true,
'',
false,
'width:100%;'
)
);
$table->data[1][1] = html_print_label_input_block(
__('Alerts'),
html_print_select(
[],
'id_alerts[]',
'',
'',
'',
'',
true,
true,
true,
'',
false,
'width:100%;'
)
);
$actions = alerts_get_alert_actions();
$table->data[2][0] = html_print_label_input_block(
__('Action'),
html_print_select(
$actions,
'action[]',
'',
'',
'',
'',
true,
true,
true,
'w100p',
false,
'width:100%'
)
);
$table->data[2][1] = html_print_label_input_block(
__('Number of matching alerts'),
'<div>'.html_print_input_text('fires_min', 0, '', false, 10, true, false, false, '', 'w30p').'<span class="margin-lr-10">'.__('to').'</span>'.html_print_input_text('fires_max', 0, '', false, 10, true, false, false, '', 'w30p').'</div>'
);
echo '<form method="post" id="form_alerts" action="index.php?sec=gmassive&sec2=godmode/massive/massive_operations&option=add_alerts">';
html_print_table($table);
attachActionButton('add', 'add', $table->width, false, $SelectAction);
echo '</form>';
?>
<script type="text/javascript">
var limit_parameters_massive = <?php echo $config['limit_parameters_massive']; ?>;
$(document).ready (function () {
$('#id_group').change(function(){
var data = $(this).val();
$.ajax({
type: "POST",
url: "ajax.php",
data: {
page: 'godmode/massive/massive_add_policies_alerts_action_external',
load_policies: 1,
id_group: data,
},
success: function(data) {
var data = $.parseJSON(data);
var options = '';
$.each( data, function( id, name ) {
options += '<option value="'+id+'">'+name+'</option>';
});
if (options!== ''){
$('#id_policies').html(options);
} else {
$('#id_policies').html('<option value="0"><?php echo __('None'); ?></option>');
}
$('#id_policies').trigger('change');
}
});
});
$('#id_policies').change(function(){
var data = $(this).val();
$.ajax({
type: "POST",
url: "ajax.php",
data: {
page: 'godmode/massive/massive_add_policies_alerts_action_external',
load_alerts_policies: 1,
policies: data,
},
success: function(data) {
var data = $.parseJSON(data);
var options = '';
$.each( data, function( id, name ) {
options += '<option value="'+id+'">'+name+'</option>';
});
if (options!== ''){
$('#id_alerts').html(options);
} else {
$('#id_alerts').html('<option value="0"><?php echo __('None'); ?></option>');
}
}
});
})
$("form").submit(function(e){
var id_policies = $('#id_policies :selected').val();
var id_alerts = $('#id_alerts :selected').val();
var action = $('#action :selected').val();
if ($.isEmptyObject(id_policies) || $.isEmptyObject(id_alerts) || $.isEmptyObject(action) || id_policies === '0' || id_alerts === '0'){
e.preventDefault();
alert('<?php echo __('Policies, Alerts and Action must to be selected'); ?>');
}
})
});
</script>

@ -103,6 +103,7 @@ if ($create_profiles) {
$groups_id = get_parameter('groups_id', -1);
$users_id = get_parameter('users_id', -1);
$n_added = 0;
$msg_error = __('Profiles cannot be added');
if ($profiles_id == -1 || $groups_id == -1 || $users_id == -1) {
$result = false;
@ -155,6 +156,8 @@ if ($create_profiles) {
if ($return !== false) {
$n_added++;
}
} else {
$msg_error = __('The profile already exist on the user');
}
}
}
@ -182,7 +185,7 @@ if ($create_profiles) {
ui_print_result_message(
$n_added > 0,
__('Profiles added successfully').'('.$n_added.')',
__('Profiles cannot be added')
$msg_error
);
}

@ -0,0 +1,325 @@
<?php
/**
* Extension to manage a list of gateways and the node address where they should
* point to.
*
* @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.
* ============================================================================
*/
check_login();
if (! check_acl($config['id_user'], 0, 'AW')) {
db_pandora_audit(
AUDIT_LOG_ACL_VIOLATION,
'Trying to access massive alert deletion'
);
include 'general/noaccess.php';
return;
}
enterprise_include_once('include/functions_policies.php');
if (is_ajax() === true) {
$load_policies = get_parameter('load_policies', 0);
$load_alerts_policies = get_parameter('load_alerts_policies', 0);
$load_actions_alerts = get_parameter('load_actions_alerts', 0);
if ($load_policies) {
$id_group = get_parameter('id_group', 0);
if ($id_group !== '0') {
$filter['force_id_group'] = $id_group;
$arr_policies = policies_get_policies($filter);
} else {
$arr_policies = policies_get_policies();
}
$policies = [];
foreach ($arr_policies as $row) {
$policies[$row['id']] = $row['name'];
}
echo json_encode($policies, true);
return;
}
if ($load_alerts_policies) {
$ids_policies = get_parameter('policies', []);
$alerts = [];
foreach ($ids_policies as $policie) {
foreach (policies_get_alerts($policie, ['id_policy_module' => '<>0']) as $row) {
$name = io_safe_output(alerts_get_alert_template_name($row['id_alert_template']).' - '.policies_get_module_name($row['id_policy_module']));
$alerts[$row['id'].'__'.policies_get_name($policie).' - '.$name] = $name;
}
}
echo json_encode($alerts, true);
return;
}
if ($load_actions_alerts) {
$array_alerts = get_parameter('id_alerts', []);
$actions = [];
foreach ($array_alerts as $alert) {
$alert_policie = explode('__', $alert);
$alert_id = $alert_policie[0];
$alert_name = $alert_policie[1];
$array_actions = db_get_all_rows_filter(
'tpolicy_alerts_actions',
['id_policy_alert' => $alert]
);
foreach ($array_actions as $row) {
$action = db_get_row_filter(
'talert_actions',
['id' => $row['id_alert_action']]
);
$actions[$row['id']] = $alert_name.' - '.$action['name'];
}
}
echo json_encode($actions, true);
return;
}
}
$delete = (bool) get_parameter_post('delete');
if ($delete) {
$array_actions = get_parameter('id_actions');
foreach ($array_actions as $id_action) {
$result = policies_delete_action_alert($id_action);
}
ui_print_result_message($result, __('Deleted action successfully'), __('Could not be deleted'), '');
}
$table = new stdClass();
$table->id = 'add_table';
$table->class = 'databox filters filter-table-adv';
$table->width = '100%';
$table->data = [];
$table->style = [];
$table->style[0] = 'font-weight: bold; vertical-align:top';
$table->style[2] = 'font-weight: bold; vertical-align:top';
$table->size = [];
$table->size[0] = '50%';
$table->size[1] = '50%';
$table->data = [];
$table->data[0][0] = html_print_label_input_block(
__('Group'),
html_print_select_groups(
false,
'AW',
true,
'id_group',
0,
'',
'All',
0,
true,
false,
true,
'',
false,
'width:180px;'
)
);
$table->data[0][1] = html_print_label_input_block(
__('Group recursion'),
html_print_checkbox('recursion', 1, $recursion, true, false, '', true)
);
$arr_policies = policies_get_policies();
$policies = [];
foreach ($arr_policies as $row) {
$policies[$row['id']] = $row['name'];
}
$table->data[1][0] = html_print_label_input_block(
__('Policies'),
html_print_select(
$policies,
'id_policies[]',
'',
'',
'',
'',
true,
true,
true,
'',
false,
'width:100%;'
)
);
$table->data[1][1] = html_print_label_input_block(
__('Alerts'),
html_print_select(
[],
'id_alerts[]',
'',
'',
'',
'',
true,
true,
true,
'',
false,
'width:100%;'
)
);
$table->colspan[2][0] = 2;
$table->data[2][0] = html_print_label_input_block(
__('Actions'),
html_print_select(
[],
'id_actions[]',
'',
'',
'',
'',
true,
true,
true,
'',
false,
'width:100%;'
)
);
echo '<form method="post" id="form_alerts" action="index.php?sec=gmassive&sec2=godmode/massive/massive_operations&option=add_alerts">';
html_print_table($table);
attachActionButton('delete', 'delete', $table->width, false, $SelectAction);
echo '</form>';
?>
<script type="text/javascript">
var limit_parameters_massive = <?php echo $config['limit_parameters_massive']; ?>;
$(document).ready (function () {
$('#id_group').change(function(){
var data = $(this).val();
$.ajax({
type: "POST",
url: "ajax.php",
data: {
page: 'godmode/massive/massive_delete_policies_alerts',
load_policies: 1,
id_group: data,
},
success: function(data) {
var data = $.parseJSON(data);
var options = '';
$.each( data, function( id, name ) {
options += '<option value="'+id+'">'+name+'</option>';
});
if (options!== ''){
$('#id_policies').html(options);
} else {
$('#id_policies').html('<option value="0"><?php echo __('None'); ?></option>');
}
$('#id_policies').trigger('change');
}
});
});
$('#id_policies').change(function(){
var data = $(this).val();
$.ajax({
type: "POST",
url: "ajax.php",
data: {
page: 'godmode/massive/massive_delete_policies_alerts',
load_alerts_policies: 1,
policies: data,
},
success: function(data) {
var data = $.parseJSON(data);
var options = '';
$.each( data, function( id, name ) {
options += '<option value="'+id+'">'+name+'</option>';
});
if (options!== ''){
$('#id_alerts').html(options);
} else {
$('#id_alerts').html('<option value="0"><?php echo __('None'); ?></option>');
}
}
});
})
$('#id_alerts').change(function(){
var data = $(this).val();
if (data !== 0){
$.ajax({
type: "POST",
url: "ajax.php",
data: {
page: 'godmode/massive/massive_delete_policies_alerts',
load_actions_alerts: 1,
id_alerts: data,
},
success: function(data) {
var data = $.parseJSON(data);
var options = '';
$.each( data, function( id, name ) {
options += '<option value="'+id+'">'+name+'</option>';
});
if (options!== ''){
$('#id_actions').html(options);
} else {
$('#id_actions').html('<option value="0"><?php echo __('None'); ?></option>');
}
}
});
}
})
$("form").submit(function(e){
var id_policies = $('#id_policies :selected').val();
var id_alerts = $('#id_alerts :selected').val();
var id_actions = $('#id_actions :selected').val();
if ($.isEmptyObject(id_policies) || $.isEmptyObject(id_alerts) || $.isEmptyObject(id_actions) || id_policies === '0' || id_alerts === '0'){
e.preventDefault();
alert('<?php echo __('Policies, Alerts and Action must to be selected'); ?>');
}
})
});
</script>

@ -0,0 +1,325 @@
<?php
/**
* Extension to manage a list of gateways and the node address where they should
* point to.
*
* @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.
* ============================================================================
*/
check_login();
if (! check_acl($config['id_user'], 0, 'AW')) {
db_pandora_audit(
AUDIT_LOG_ACL_VIOLATION,
'Trying to access massive alert deletion'
);
include 'general/noaccess.php';
return;
}
enterprise_include_once('include/functions_policies.php');
if (is_ajax() === true) {
$load_policies = get_parameter('load_policies', 0);
$load_alerts_policies = get_parameter('load_alerts_policies', 0);
$load_actions_alerts = get_parameter('load_actions_alerts', 0);
if ($load_policies) {
$id_group = get_parameter('id_group', 0);
if ($id_group !== '0') {
$filter['force_id_group'] = $id_group;
$arr_policies = policies_get_policies($filter);
} else {
$arr_policies = policies_get_policies();
}
$policies = [];
foreach ($arr_policies as $row) {
$policies[$row['id']] = $row['name'];
}
echo json_encode($policies, true);
return;
}
if ($load_alerts_policies) {
$ids_policies = get_parameter('policies', []);
$alerts = [];
foreach ($ids_policies as $policie) {
foreach (policies_get_alerts($policie, ['id_policy_module' => '0']) as $row) {
$name = io_safe_output(alerts_get_alert_template_name($row['id_alert_template']).' - '.$row['name_extern_module']);
$alerts[$row['id'].'__'.policies_get_name($policie).' - '.$name] = $name;
}
}
echo json_encode($alerts, true);
return;
}
if ($load_actions_alerts) {
$array_alerts = get_parameter('id_alerts', []);
$actions = [];
foreach ($array_alerts as $alert) {
$alert_policie = explode('__', $alert);
$alert_id = $alert_policie[0];
$alert_name = $alert_policie[1];
$array_actions = db_get_all_rows_filter(
'tpolicy_alerts_actions',
['id_policy_alert' => $alert]
);
foreach ($array_actions as $row) {
$action = db_get_row_filter(
'talert_actions',
['id' => $row['id_alert_action']]
);
$actions[$row['id']] = $alert_name.' - '.$action['name'];
}
}
echo json_encode($actions, true);
return;
}
}
$delete = (bool) get_parameter_post('delete');
if ($delete) {
$array_actions = get_parameter('id_actions');
foreach ($array_actions as $id_action) {
$result = policies_delete_action_alert($id_action);
}
ui_print_result_message($result, __('Deleted action successfully'), __('Could not be deleted'), '');
}
$table = new stdClass();
$table->id = 'add_table';
$table->class = 'databox filters filter-table-adv';
$table->width = '100%';
$table->data = [];
$table->style = [];
$table->style[0] = 'font-weight: bold; vertical-align:top';
$table->style[2] = 'font-weight: bold; vertical-align:top';
$table->size = [];
$table->size[0] = '50%';
$table->size[1] = '50%';
$table->data = [];
$table->data[0][0] = html_print_label_input_block(
__('Group'),
html_print_select_groups(
false,
'AW',
true,
'id_group',
0,
'',
'All',
0,
true,
false,
true,
'',
false,
'width:180px;'
)
);
$table->data[0][1] = html_print_label_input_block(
__('Group recursion'),
html_print_checkbox('recursion', 1, $recursion, true, false, '', true)
);
$arr_policies = policies_get_policies();
$policies = [];
foreach ($arr_policies as $row) {
$policies[$row['id']] = $row['name'];
}
$table->data[1][0] = html_print_label_input_block(
__('Policies'),
html_print_select(
$policies,
'id_policies[]',
'',
'',
'',
'',
true,
true,
true,
'',
false,
'width:100%;'
)
);
$table->data[1][1] = html_print_label_input_block(
__('Alerts'),
html_print_select(
[],
'id_alerts[]',
'',
'',
'',
'',
true,
true,
true,
'',
false,
'width:100%;'
)
);
$table->colspan[2][0] = 2;
$table->data[2][0] = html_print_label_input_block(
__('Actions'),
html_print_select(
[],
'id_actions[]',
'',
'',
'',
'',
true,
true,
true,
'',
false,
'width:100%;'
)
);
echo '<form method="post" id="form_alerts" action="index.php?sec=gmassive&sec2=godmode/massive/massive_operations&option=add_alerts">';
html_print_table($table);
attachActionButton('delete', 'delete', $table->width, false, $SelectAction);
echo '</form>';
?>
<script type="text/javascript">
var limit_parameters_massive = <?php echo $config['limit_parameters_massive']; ?>;
$(document).ready (function () {
$('#id_group').change(function(){
var data = $(this).val();
$.ajax({
type: "POST",
url: "ajax.php",
data: {
page: 'godmode/massive/massive_delete_policies_alerts_action_external',
load_policies: 1,
id_group: data,
},
success: function(data) {
var data = $.parseJSON(data);
var options = '';
$.each( data, function( id, name ) {
options += '<option value="'+id+'">'+name+'</option>';
});
if (options!== ''){
$('#id_policies').html(options);
} else {
$('#id_policies').html('<option value="0"><?php echo __('None'); ?></option>');
}
$('#id_policies').trigger('change');
}
});
});
$('#id_policies').change(function(){
var data = $(this).val();
$.ajax({
type: "POST",
url: "ajax.php",
data: {
page: 'godmode/massive/massive_delete_policies_alerts_action_external',
load_alerts_policies: 1,
policies: data,
},
success: function(data) {
var data = $.parseJSON(data);
var options = '';
$.each( data, function( id, name ) {
options += '<option value="'+id+'">'+name+'</option>';
});
if (options!== ''){
$('#id_alerts').html(options);
} else {
$('#id_alerts').html('<option value="0"><?php echo __('None'); ?></option>');
}
}
});
})
$('#id_alerts').change(function(){
var data = $(this).val();
if (data !== 0){
$.ajax({
type: "POST",
url: "ajax.php",
data: {
page: 'godmode/massive/massive_delete_policies_alerts_action_external',
load_actions_alerts: 1,
id_alerts: data,
},
success: function(data) {
var data = $.parseJSON(data);
var options = '';
$.each( data, function( id, name ) {
options += '<option value="'+id+'">'+name+'</option>';
});
if (options!== ''){
$('#id_actions').html(options);
} else {
$('#id_actions').html('<option value="0"><?php echo __('None'); ?></option>');
}
}
});
}
})
$("form").submit(function(e){
var id_policies = $('#id_policies :selected').val();
var id_alerts = $('#id_alerts :selected').val();
var id_actions = $('#id_actions :selected').val();
if ($.isEmptyObject(id_policies) || $.isEmptyObject(id_alerts) || $.isEmptyObject(id_actions) || id_policies === '0' || id_alerts === '0'){
e.preventDefault();
alert('<?php echo __('Policies, Alerts and Action must to be selected'); ?>');
}
})
});
</script>

@ -965,7 +965,6 @@ $table->data[19][0] = html_print_label_input_block(
);
$snmp_versions['1'] = 'v. 1';
$snmp_versions['2'] = 'v. 2';
$snmp_versions['2c'] = 'v. 2c';
$snmp_versions['3'] = 'v. 3';

@ -371,7 +371,6 @@ $autorefresh_list_out['operation/agentes/status_monitor'] = 'Monitor detail';
$autorefresh_list_out['enterprise/operation/services/services'] = 'Services';
$autorefresh_list_out['operation/dashboard/dashboard'] = 'Dashboard';
$autorefresh_list_out['operation/agentes/pandora_networkmap'] = 'Network map';
$autorefresh_list_out['operation/visual_console/render_view'] = 'Visual console';
$autorefresh_list_out['operation/events/events'] = 'Events';

@ -64,6 +64,16 @@ $options_alerts = [
'standby_alerts' => __('Bulk alert setting standby'),
];
$options_alerts_policies = [
'add_policies_alerts' => __('Bulk policies alert action add'),
'delete_policies_alerts' => __('Bulk policies alert action delete'),
];
$options_policies_alerts_externals = [
'add_policies_alerts_action_external' => __('Bulk policies external alert action add'),
'delete_policies_alerts_action_external' => __('Bulk policies external alert action delete'),
];
$options_agents = [
'edit_agents' => __('Bulk agent edit'),
'delete_agents' => __('Bulk agent delete'),
@ -119,6 +129,10 @@ if ($satellite_options != ENTERPRISE_NOT_HOOK) {
if (in_array($option, array_keys($options_alerts)) === true) {
$tab = 'massive_alerts';
} else if (in_array($option, array_keys($options_alerts_policies)) === true) {
$tab = 'massive_policies_alerts';
} else if (in_array($option, array_keys($options_policies_alerts_externals)) === true) {
$tab = 'massive_policies_alerts_external';
} else if (in_array($option, array_keys($options_agents)) === true) {
$tab = 'massive_agents';
} else if (in_array($option, array_keys($options_users)) === true) {
@ -173,6 +187,14 @@ switch ($tab) {
$options = $options_alerts;
break;
case 'massive_policies_alerts':
$options = $options_alerts_policies;
break;
case 'massive_policies_alerts_external':
$options = $options_policies_alerts_externals;
break;
case 'massive_agents':
$options = $options_agents;
break;
@ -223,6 +245,30 @@ $alertstab = [
'active' => $tab == 'massive_alerts',
];
$policiesalertstab = [
'text' => '<a href="'.$url.'&tab=massive_policies_alerts">'.html_print_image(
'images/policies_mc.png',
true,
[
'title' => __('Policies alerts'),
'class' => 'invert_filter main_menu_icon',
]
).'</a>',
'active' => $tab == 'massive_policies_alerts',
];
$policiesalertsexternaltab = [
'text' => '<a href="'.$url.'&tab=massive_policies_alerts_external">'.html_print_image(
'images/alerts_extern.png',
true,
[
'title' => __('Policies external alerts'),
'class' => 'invert_filter main_menu_icon',
]
).'</a>',
'active' => $tab == 'massive_policies_alerts_external',
];
$userstab = [
'text' => '<a href="'.$url.'&tab=massive_users">'.html_print_image(
'images/user.svg',
@ -298,6 +344,8 @@ if (check_acl($config['id_user'], 0, 'UM')) {
}
$onheader['massive_alerts'] = $alertstab;
$onheader['massive_policies_alerts'] = $policiesalertstab;
$onheader['massive_policies_alerts_external'] = $policiesalertsexternaltab;
$onheader['policies'] = $policiestab;
$onheader['snmp'] = $snmptab;
$onheader['satellite'] = $satellitetab;
@ -318,6 +366,8 @@ if (is_metaconsole() === false) {
$pluginstab,
$userstab,
$alertstab,
$policiesalertstab,
$policiesalertsexternaltab,
$policiestab,
$snmptab,
$satellitetab,
@ -490,6 +540,22 @@ switch ($option) {
include_once $config['homedir'].'/godmode/massive/massive_standby_alerts.php';
break;
case 'add_policies_alerts':
include_once $config['homedir'].'/godmode/massive/massive_add_policies_alerts.php';
break;
case 'delete_policies_alerts':
include_once $config['homedir'].'/godmode/massive/massive_delete_policies_alerts.php';
break;
case 'add_policies_alerts_action_external':
include_once $config['homedir'].'/godmode/massive/massive_add_policies_alerts_action_external.php';
break;
case 'delete_policies_alerts_action_external':
include_once $config['homedir'].'/godmode/massive/massive_delete_policies_alerts_action_external.php';
break;
case 'add_profiles':
include_once $config['homedir'].'/godmode/massive/massive_add_profiles.php';
break;

@ -82,12 +82,12 @@ if ((bool) check_acl($config['id_user'], 0, 'AR') === true
// Applications.
$sub2 = [];
if (enterprise_installed() === true) {
$sub2['godmode/servers/discovery&wiz=app&mode=MicrosoftSQLServer']['text'] = __('Microsoft SQL Server');
$sub2['godmode/servers/discovery&wiz=app&mode=mysql']['text'] = __('Mysql');
$sub2['godmode/servers/discovery&wiz=app&mode=oracle']['text'] = __('Oracle');
$sub2['godmode/servers/discovery&wiz=app&mode=vmware']['text'] = __('VMware');
$sub2['godmode/servers/discovery&wiz=app&mode=SAP']['text'] = __('SAP');
$sub2['godmode/servers/discovery&wiz=app&mode=DB2']['text'] = __('DB2');
$sub2['godmode/servers/discovery&wiz=app&mode=MicrosoftSQLServer']['text'] = __('Microsoft SQL Server (legacy)');
$sub2['godmode/servers/discovery&wiz=app&mode=mysql']['text'] = __('Mysql (legacy)');
$sub2['godmode/servers/discovery&wiz=app&mode=oracle']['text'] = __('Oracle (legacy)');
$sub2['godmode/servers/discovery&wiz=app&mode=vmware']['text'] = __('VMware (legacy)');
$sub2['godmode/servers/discovery&wiz=app&mode=SAP']['text'] = __('SAP (legacy)');
$sub2['godmode/servers/discovery&wiz=app&mode=DB2']['text'] = __('DB2 (legacy)');
}
$extensions = ManageExtensions::getExtensionBySection('app');
@ -112,9 +112,9 @@ if ((bool) check_acl($config['id_user'], 0, 'AR') === true
// Cloud.
$sub2 = [];
if (enterprise_installed() === true) {
$sub2['godmode/servers/discovery&wiz=cloud&mode=amazonws']['text'] = __('Amazon Web Services');
$sub2['godmode/servers/discovery&wiz=cloud&mode=azure']['text'] = __('Microsoft Azure');
$sub2['godmode/servers/discovery&wiz=cloud&mode=gcp']['text'] = __('Google Compute Platform');
$sub2['godmode/servers/discovery&wiz=cloud&mode=amazonws']['text'] = __('Amazon Web Services (legacy)');
$sub2['godmode/servers/discovery&wiz=cloud&mode=azure']['text'] = __('Microsoft Azure (legacy)');
$sub2['godmode/servers/discovery&wiz=cloud&mode=gcp']['text'] = __('Google Compute Platform (legacy)');
}
@ -309,6 +309,8 @@ if ($access_console_node === true) {
}
$sub2['godmode/massive/massive_operations&tab=massive_alerts']['text'] = __('Alerts operations');
$sub2['godmode/massive/massive_operations&tab=massive_policies_alerts']['text'] = __('Policies alerts');
$sub2['godmode/massive/massive_operations&tab=massive_policies_alerts_external']['text'] = __('Policies External alerts');
enterprise_hook('massivepolicies_submenu');
enterprise_hook('massivesnmp_submenu');
enterprise_hook('massivesatellite_submenu');

@ -45,7 +45,6 @@ if (!$id && !isset($snmp_community)) {
}
$snmp_versions['1'] = 'v. 1';
$snmp_versions['2'] = 'v. 2';
$snmp_versions['2c'] = 'v. 2c';
$snmp_versions['3'] = 'v. 3';

@ -190,14 +190,21 @@ $output .= html_print_label_input_block(
html_print_extended_select_for_time(
'period',
$period,
'',
'check_period_warning(this, \''.__('Warning').'\', \''.__('Displaying items with extended historical data can have an impact on system performance. We do not recommend that you use intervals longer than 30 days, especially if you combine several of them in a report, dashboard or visual console.').'\')',
'',
'0',
false,
true,
false,
false,
'w100p'
'w100p',
false,
false,
'',
false,
0,
null,
'check_period_warning_manual(\'period\', \''.__('Warning').'\', \''.__('Displaying items with extended historical data can have an impact on system performance. We do not recommend that you use intervals longer than 30 days, especially if you combine several of them in a report, dashboard or visual console.').'\')'
)
);
$output .= "</td><td class='datos2' width='50%'>";

@ -1519,10 +1519,21 @@ $class = 'databox filters';
html_print_extended_select_for_time(
'period',
$period,
'',
'check_period_warning(this, \''.__('Warning').'\', \''.__('Displaying items with extended historical data can have an impact on system performance. We do not recommend that you use intervals longer than 30 days, especially if you combine several of them in a report, dashboard or visual console.').'\')',
'',
'0',
10
10,
false,
false,
true,
'',
false,
false,
'',
false,
0,
null,
'check_period_warning_manual(\'period\', \''.__('Warning').'\', \''.__('Displaying items with extended historical data can have an impact on system performance. We do not recommend that you use intervals longer than 30 days, especially if you combine several of them in a report, dashboard or visual console.').'\')'
);
?>
</td>
@ -1542,10 +1553,21 @@ $class = 'databox filters';
html_print_extended_select_for_time(
'period_range',
$period_range,
'',
'check_period_warning(this, \''.__('Warning').'\', \''.__('Displaying items with extended historical data can have an impact on system performance. We do not recommend that you use intervals longer than 30 days, especially if you combine several of them in a report, dashboard or visual console.').'\')',
'',
'0',
10
10,
false,
false,
true,
'',
false,
false,
'',
false,
0,
null,
'check_period_warning_manual(\'period_range\', \''.__('Warning').'\', \''.__('Displaying items with extended historical data can have an impact on system performance. We do not recommend that you use intervals longer than 30 days, especially if you combine several of them in a report, dashboard or visual console.').'\')'
);
?>
</td>
@ -1585,10 +1607,21 @@ $class = 'databox filters';
html_print_extended_select_for_time(
'period1',
$period_pg,
'',
'check_period_warning(this)',
'',
'0',
10
10,
false,
false,
true,
'',
false,
false,
'',
false,
0,
null,
'check_period_warning_manual(\'period\')'
);
?>
</td>
@ -1604,10 +1637,21 @@ $class = 'databox filters';
html_print_extended_select_for_time(
'period2',
$projection_period,
'',
'check_period_warning(this)',
'',
'0',
10
10,
false,
false,
true,
'',
false,
false,
'',
false,
0,
null,
'check_period_warning_manual(\'period\')'
);
?>
</td>
@ -3538,7 +3582,7 @@ $class = 'databox filters';
html_print_extended_select_for_time(
'lapse',
$lapse,
'',
'check_period_warning(this, \''.__('Warning').'\', \''.__('Displaying items with extended historical data can have an impact on system performance. We do not recommend that you use intervals longer than 30 days, especially if you combine several of them in a report, dashboard or visual console.').'\')',
__('None'),
'0',
10,
@ -3546,7 +3590,13 @@ $class = 'databox filters';
'',
'',
'',
!$lapse_calc
!$lapse_calc,
false,
'',
false,
0,
null,
'check_period_warning_manual(\'lapse\', \''.__('Warning').'\', \''.__('Displaying items with extended historical data can have an impact on system performance. We do not recommend that you use intervals longer than 30 days, especially if you combine several of them in a report, dashboard or visual console.').'\')'
);
?>
</td>

@ -1280,8 +1280,7 @@ switch ($action) {
$discovery_tasklist = new DiscoveryTaskList();
$report_task_data = $discovery_tasklist->showListConsoleTask(true);
if (is_array($report_task_data) === true || strpos($report_task_data, 'class="nf"') === false) {
if (is_array($report_task_data) === true || (strpos($report_task_data, 'class="nf"') === false && $report_task_data !== -1)) {
$task_table = '<div class="mrgn_top_15px white_box">';
$task_table .= '<span class="white_table_graph_header">'.__('Report tasks');
$task_table .= ui_print_help_tip(__('To schedule a report, do it from the editing view of each report.'), true);
@ -1290,6 +1289,10 @@ switch ($action) {
$task_table .= '</div></div>';
echo $task_table;
} else {
if ($report_task_data === -1) {
$report_task_data = '';
}
ui_print_info_message($report_task_data.__('To schedule a report, do it from the editing view of each report.'));
}

@ -182,7 +182,7 @@ if ($layoutDatas === false) {
$alternativeStyle = true;
$parents = visual_map_get_items_parents($idVisualConsole);
$x = 0;
foreach ($layoutDatas as $layoutData) {
$idLayoutData = $layoutData['id'];
@ -537,7 +537,8 @@ foreach ($layoutDatas as $layoutData) {
$table->data[($i + 1)][5] = '';
$table->data[($i + 1)][5] .= html_print_checkbox('multiple_delete_items', $idLayoutData, false, true);
$table->data[($i + 1)][5] .= '<a href="'.$url_delete.'" '.'onclick="javascript: if (!confirm(\''.__('Are you sure?').'\')) return false;">'.html_print_image('images/delete.svg', true, ['class' => 'main_menu_icon invert_filter']).'</a>';
$table->data[($i + 1)][5] .= '<a href="'.$url_delete.'"onclick="javascript: if (!confirm(\''.__('Are you sure?').'\')) return false;">'.html_print_image('images/delete.svg', true, ['class' => 'main_menu_icon invert_filter']).'</a>';
$table->data[($i + 1)][5] .= html_print_input_hidden('updated_'.$idLayoutData, '0', true);
// Second row
$table->data[($i + 2)]['icon'] = '';
@ -778,6 +779,12 @@ foreach ($layoutDatas as $layoutData) {
$alternativeStyle = !$alternativeStyle;
$i = ($i + 3);
$x++;
}
$x = (($x * 13) + 14);
if ($x > ini_get('max_input_vars')) {
ui_print_warning_message(__('You have to change the <b>"max_input_vars"</b> and set bigger value on <b>php.ini</b> for update, there is too much elements to update'));
}
$pure = get_parameter('pure', 0);
@ -888,6 +895,16 @@ ui_require_javascript_file('tinymce', 'vendor/tinymce/tinymce/');
return false;
});
$('select[id^="image_"], input[name^="width_"], input[name^="height"], input[name^="left_"], input[name^="top_"], select[id^="parent_"], input[id^="agent_"], select[id^="module_"]').change(function(){
var id = $(this).attr('id').split('_')[1];
$('#hidden-updated_'+id).val('1');
});
$('select[id^="map_linked"]').change(function(){
var id = $(this).attr('id').split('_')[2];
$('#hidden-updated_'+id).val('1');
});
defineTinyMCE('#tinyMCE_editor');
$("#dialog_label_editor").hide ()

@ -418,7 +418,6 @@ switch ($activeTab) {
case 'update':
// Update background
$background = get_parameter('background');
$background_color = get_parameter('background_color');
$width = get_parameter('width');
$height = get_parameter('height');
@ -433,10 +432,9 @@ switch ($activeTab) {
db_process_sql_update(
'tlayout',
[
'background' => $background,
'background_color' => $background_color,
'width' => $width,
'height' => $height,
'background' => $background,
'width' => $width,
'height' => $height,
],
['id' => $idVisualConsole]
);
@ -463,62 +461,65 @@ switch ($activeTab) {
foreach ($idsElements as $idElement) {
$id = $idElement['id'];
$values = [];
$values['label'] = get_parameter('label_'.$id, '');
$values['image'] = get_parameter('image_'.$id, '');
$values['width'] = get_parameter('width_'.$id, 0);
$values['height'] = get_parameter('height_'.$id, 0);
$values['pos_x'] = get_parameter('left_'.$id, 0);
$values['pos_y'] = get_parameter('top_'.$id, 0);
switch ($idElement['type']) {
case NETWORK_LINK:
case LINE_ITEM:
continue 2;
$update = get_parameter('updated_'.$id, 0);
if ($update === '1') {
$values = [];
$values['label'] = get_parameter('label_'.$id, '');
$values['image'] = get_parameter('image_'.$id, '');
$values['width'] = get_parameter('width_'.$id, 0);
$values['height'] = get_parameter('height_'.$id, 0);
$values['pos_x'] = get_parameter('left_'.$id, 0);
$values['pos_y'] = get_parameter('top_'.$id, 0);
switch ($idElement['type']) {
case NETWORK_LINK:
case LINE_ITEM:
continue 2;
break;
break;
case SIMPLE_VALUE_MAX:
case SIMPLE_VALUE_MIN:
case SIMPLE_VALUE_AVG:
$values['period'] = get_parameter('period_'.$id, 0);
break;
case SIMPLE_VALUE_MAX:
case SIMPLE_VALUE_MIN:
case SIMPLE_VALUE_AVG:
$values['period'] = get_parameter('period_'.$id, 0);
break;
case MODULE_GRAPH:
$values['period'] = get_parameter('period_'.$id, 0);
unset($values['image']);
break;
case MODULE_GRAPH:
$values['period'] = get_parameter('period_'.$id, 0);
unset($values['image']);
break;
case GROUP_ITEM:
$values['id_group'] = get_parameter('group_'.$id, 0);
break;
case GROUP_ITEM:
$values['id_group'] = get_parameter('group_'.$id, 0);
break;
case CIRCULAR_PROGRESS_BAR:
case CIRCULAR_INTERIOR_PROGRESS_BAR:
case PERCENTILE_BUBBLE:
case PERCENTILE_BAR:
unset($values['height']);
break;
case CIRCULAR_PROGRESS_BAR:
case CIRCULAR_INTERIOR_PROGRESS_BAR:
case PERCENTILE_BUBBLE:
case PERCENTILE_BAR:
unset($values['height']);
break;
}
$agentName = get_parameter('agent_'.$id, '');
if (defined('METACONSOLE')) {
$values['id_metaconsole'] = (int) get_parameter('id_server_id_'.$id, '');
$values['id_agent'] = (int) get_parameter('id_agent_'.$id, 0);
} else {
$agent_id = (int) get_parameter('id_agent_'.$id, 0);
$values['id_agent'] = $agent_id;
}
$values['id_agente_modulo'] = get_parameter('module_'.$id, 0);
$values['id_custom_graph'] = get_parameter('custom_graph_'.$id, 0);
$values['parent_item'] = get_parameter('parent_'.$id, 0);
$values['id_layout_linked'] = get_parameter('map_linked_'.$id, 0);
if (enterprise_installed()) {
enterprise_visual_map_update_action_from_list_elements($type, $values, $id);
}
db_process_sql_update('tlayout_data', $values, ['id' => $id]);
}
$agentName = get_parameter('agent_'.$id, '');
if (defined('METACONSOLE')) {
$values['id_metaconsole'] = (int) get_parameter('id_server_id_'.$id, '');
$values['id_agent'] = (int) get_parameter('id_agent_'.$id, 0);
} else {
$agent_id = (int) get_parameter('id_agent_'.$id, 0);
$values['id_agent'] = $agent_id;
}
$values['id_agente_modulo'] = get_parameter('module_'.$id, 0);
$values['id_custom_graph'] = get_parameter('custom_graph_'.$id, 0);
$values['parent_item'] = get_parameter('parent_'.$id, 0);
$values['id_layout_linked'] = get_parameter('map_linked_'.$id, 0);
if (enterprise_installed()) {
enterprise_visual_map_update_action_from_list_elements($type, $values, $id);
}
db_process_sql_update('tlayout_data', $values, ['id' => $id]);
}
break;
@ -554,6 +555,7 @@ switch ($activeTab) {
$type = (int) get_parameter('type', STATIC_GRAPH);
$image = get_parameter('image');
$range = (int) get_parameter('range', 50);
$range_vertical = (int) get_parameter('range_vertical', 50);
$width = (int) get_parameter('width', 0);
$height = (int) get_parameter('height', 0);
$period = (int) get_parameter('period', 0);
@ -566,6 +568,9 @@ switch ($activeTab) {
$label_type = get_parameter('label_type', 'agent_module');
$enable_link = get_parameter('enable_link', 'enable_link');
$show_on_top = get_parameter('show_on_top', 0);
$pos_x = get_parameter('pos_x', 0);
$pos_y = get_parameter('pos_y', 0);
$max_elements_row = (int) get_parameter('max_elements_row', 0);
// This var switch between creation of items, item_per_agent = 0 => item per module; item_per_agent <> 0 => item per agent
$item_per_agent = get_parameter('item_per_agent', 0);
@ -610,6 +615,7 @@ switch ($activeTab) {
$image,
$idVisualConsole,
$range,
$range_vertical,
$width,
$height,
$period,
@ -625,7 +631,10 @@ switch ($activeTab) {
$kind_relationship,
$item_in_the_map,
$fontf,
$fonts
$fonts,
$pos_x,
$pos_y,
$max_elements_row
);
$statusProcessInDB = [
@ -667,6 +676,7 @@ switch ($activeTab) {
$image,
$idVisualConsole,
$range,
$range_vertical,
$width,
$height,
$period,
@ -682,7 +692,10 @@ switch ($activeTab) {
$kind_relationship,
$item_in_the_map,
$fontf,
$fonts
$fonts,
$pos_x,
$pos_y,
$max_elements_row
);
} else {
$id_modules = [];
@ -721,6 +734,7 @@ switch ($activeTab) {
$image,
$idVisualConsole,
$range,
$range_vertical,
$width,
$height,
$period,
@ -736,7 +750,10 @@ switch ($activeTab) {
$kind_relationship,
$item_in_the_map,
$fontf,
$fonts
$fonts,
$pos_x,
$pos_y,
$max_elements_row
);
}
}

@ -144,22 +144,28 @@ $table->data['all_0'][0] = html_print_label_input_block(
$table->rowstyle['staticgraph'] = 'display: none;';
$table->colspan['staticgraph'][0] = 2;
$table->data['staticgraph'][0] = html_print_label_input_block(
__('Image'),
html_print_select(
'<div class="flex">'.html_print_select(
$images_list,
'image',
'',
'',
'',
'',
true
)
true,
false,
true,
'',
false,
'width: 49%'
).'<span id="image_prev" class="mrgn_lft_10px mrgn_top-10px"><img src="'.$config['homeurl'].'/images/console/icons/appliance_ok.png"></span></div>'
);
$table->rowstyle['all_1'] = 'display: none;';
$table->data['all_1'][0] = html_print_label_input_block(
__('Range between elements (px)'),
__('Horizontal range between elements (px)'),
html_print_input_text(
'range',
50,
@ -170,6 +176,18 @@ $table->data['all_1'][0] = html_print_label_input_block(
)
);
$table->data['all_1'][1] = html_print_label_input_block(
__('Vertical range between elements (px)'),
html_print_input_text(
'range_vertical',
50,
'',
5,
5,
true
)
);
$input_size = __('Width').': ';
$input_size .= html_print_input_text('width', 0, '', 5, 5, true);
$input_size .= __('Height').': ';
@ -425,6 +443,16 @@ if (is_metaconsole() === false) {
);
}
$table->data['all_4_01'][0] = html_print_label_input_block(
__('Filter agents'),
html_print_input_text('filter_agents', '', '', false, 255, true)
);
$table->data['all_4_01'][1] = html_print_label_input_block(
__('Filter modules'),
html_print_input_text('filter_modules', '', '', false, 255, true)
);
$table->rowstyle['all_4'] = 'display: none;';
$table->data['all_4'][0] = html_print_label_input_block(
__('Agents').ui_print_help_tip(
@ -549,6 +577,16 @@ $table->data['all_8'][1] = html_print_label_input_block(
).'</span>'
);
$table->data['all_10'][0] = html_print_label_input_block(
__('Max. elements for row'),
html_print_input_text('max_elements_row', 0, '', false, 255, true)
);
$table->data['all_10'][1] = html_print_label_input_block(
__('Position'),
'<div class="flex_center"><span class="mrgn_right_10px">X</span>'.html_print_input_text('pos_x', 0, '', false, 255, true, false, false, '', 'w50p').'<span class="margin-lr-10">Y</span>'.html_print_input_text('pos_y', 0, '', false, 255, true, false, false, '', 'w50p').'</div>'
);
if (is_metaconsole() === true) {
$pure = get_parameter('pure', 0);
@ -831,6 +869,44 @@ function item_per_agent_change(itemPerAgent) {
function metaconsole_init() {
$("#groups").change();
}
$('#text-filter_agents').on('keyup',function(){
if ($(this).val() !== ''){
findInSelect('id_agents',$(this).val());
} else {
$('#id_agents option').each(function(){
$(this).removeClass('invisible');
});
}
});
$('#text-filter_modules').on('keyup',function(){
if ($(this).val() !== ''){
findInSelect('module',$(this).val());
} else {
$('#module option').each(function(){
$(this).removeClass('invisible');
});
}
});
function findInSelect(selectid, find){
var select = $('#'+selectid+' option');
select.each(function(){
var regex = new RegExp(find, "gi");
if ($(this).html().match(regex) === null) {
$(this).addClass('invisible');
} else {
$(this).removeClass('invisible');
}
})
}
$('#image').on('change', function(){
var img = $(this).val();
$('#image_prev').html('<img src="<?php echo $config['homeurl']; ?>/images/console/icons/'+img+'.png">');
})
</script>
<style type="text/css">
select[name='kind_relationship'] option[disabled='disabled'] {

@ -24,6 +24,14 @@ if (! check_acl($config['id_user'], 0, 'AR')
ui_require_css_file('discovery');
ui_require_javascript_file('pandora_alerts');
ui_include_time_picker();
ui_require_jquery_file('ui.datepicker-'.get_user_language(), 'include/javascript/i18n/');
ui_require_javascript_file('tinymce', 'vendor/tinymce/tinymce/');
ui_require_css_file('main.min', 'include/javascript/fullcalendar/');
ui_require_javascript_file('main.min', 'include/javascript/fullcalendar/');
ui_require_javascript_file('pandora_fullcalendar');
/**
* Mask class names.
@ -204,3 +212,115 @@ if ($classname_selected === null) {
Wizard::printBigButtonsList($wiz_data);
}
$is_management_allowed = is_management_allowed();
$task_id = get_parameter('task', '');
if ($task_id !== '') {
$task = db_get_row_filter(
'tuser_task_scheduled',
['id' => $task_id]
);
$args = unserialize($task['args']);
$event_calendar = io_safe_output($args['weekly_schedule']);
} else {
$event_calendar = '{"monday":[{"start":"00:00:00","end":"00:00:00"}],"tuesday":[{"start":"00:00:00","end":"00:00:00"}],"wednesday":[{"start":"00:00:00","end":"00:00:00"}],"thursday":[{"start":"00:00:00","end":"00:00:00"}],"friday":[{"start":"00:00:00","end":"00:00:00"}],"saturday":[{"start":"00:00:00","end":"00:00:00"}],"sunday":[{"start":"00:00:00","end":"00:00:00"}]}';
}
?>
<script type="text/javascript">
$(document).ready (function () {
$("#table-new-job-3").hide();
var edit = '<?php echo $task_id; ?>';
if (edit != '') {
exec_calendar();
}
$("#scheduled").change(exec_calendar);
function exec_calendar() {
if ($("#scheduled").val() == "weekly") {
var is_management_allowed = parseInt('<?php echo (int) $is_management_allowed; ?>');
var eventsBBDD = '<?php echo $event_calendar; ?>';
var events = loadEventBBDD(eventsBBDD);
var calendarEl = document.getElementById('calendar_map');
var options = {
contentHeight: "auto",
headerToolbar: {
left: "",
center: "",
right: is_management_allowed === 0 ? '' : "timeGridWeek,dayGridWeek"
},
buttonText: {
dayGridWeek: '<?php echo __('Simple'); ?>',
timeGridWeek: '<?php echo __('Detailed'); ?>'
},
dayHeaderFormat: { weekday: "short" },
initialView: "dayGridWeek",
navLinks: false,
selectable: true,
selectMirror: true,
slotDuration: "01:00:00",
slotLabelInterval: "02:00:00",
snapDuration: "01:00:00",
slotMinTime: "00:00:00",
slotMaxTime: "24:00:00",
scrollTime: "01:00:00",
locale: "en-GB",
firstDay: 1,
eventTimeFormat: {
hour: "numeric",
minute: "2-digit",
hour12: false
},
eventColor: "#82b92e",
editable: is_management_allowed === 0 ? false : true,
dayMaxEvents: 3,
dayPopoverFormat: { weekday: "long" },
defaultAllDay: false,
displayEventTime: true,
displayEventEnd: true,
selectOverlap: false,
eventOverlap: false,
allDaySlot: true,
droppable: false,
select: is_management_allowed === 0 ? false : select_alert_template,
selectAllow: is_management_allowed === 0 ? false : selectAllow_alert_template,
eventAllow: is_management_allowed === 0 ? false : eventAllow_alert_template,
eventDrop: is_management_allowed === 0 ? false : eventDrop_alert_template,
eventDragStop: is_management_allowed === 0 ? false : eventDragStop_alert_template,
eventResize: is_management_allowed === 0 ? false : eventResize_alert_template,
eventMouseEnter: is_management_allowed === 0 ? false : eventMouseEnter_alert_template,
eventMouseLeave: is_management_allowed === 0 ? false : eventMouseLeave_alert_template,
eventClick: is_management_allowed === 0 ? false : eventClick_alert_template,
};
var settings = {
timeFormat: '<?php echo TIME_FORMAT_JS; ?>',
timeOnlyTitle: '<?php echo __('Choose time'); ?>',
timeText: '<?php echo __('Time'); ?>',
hourText: '<?php echo __('Hour'); ?>',
minuteText: '<?php echo __('Minute'); ?>',
secondText: '<?php echo __('Second'); ?>',
currentText: '<?php echo __('Now'); ?>',
closeText: '<?php echo __('Close'); ?>',
url: '<?php echo ui_get_full_url('ajax.php', false, false, false); ?>',
removeText: '<?php echo __('Remove'); ?>',
userLanguage: '<?php echo get_user_language(); ?>',
loadingText: '<?php echo __('Loading, this operation might take several minutes...'); ?>',
tooltipText: '<?php echo __('Drag out to remove'); ?>',
alert: '<?php echo __('Alert'); ?>'
}
var calendar = fullCalendarPandora(calendarEl, options, settings, events);
calendar.render();
$("#table-new-job-3").show();
$('.fc-event-title').hide();
$(".fc-button-active" ).trigger( "click" );
} else {
$("#calendar_map").html();
$("#table-new-job-3").hide();
}
}
});
</script>

@ -45,9 +45,120 @@ if (! check_acl($config['id_user'], 0, 'AW')) {
if (isset($_GET['server']) === true) {
$id_server = get_parameter_get('server');
$title = __('Update').' ';
$sql = sprintf('SELECT name, ip_address, description, server_type, exec_proxy, port FROM tserver WHERE id_server = %d', $id_server);
$row = db_get_row_sql($sql);
switch ($row['server_type']) {
case SERVER_TYPE_DATA:
$title .= __('Data server').' ID: '.$id_server;
break;
case SERVER_TYPE_NETWORK:
$title .= __('Network server').' ID: '.$id_server;
break;
case SERVER_TYPE_SNMP:
$title .= __('SNMP Trap server').' ID: '.$id_server;
break;
case SERVER_TYPE_DISCOVERY:
$title .= __('Discovery server').' ID: '.$id_server;
break;
case SERVER_TYPE_PLUGIN:
$title .= __('Plugin server').' ID: '.$id_server;
break;
case SERVER_TYPE_PREDICTION:
$title .= __('Prediction server').' ID: '.$id_server;
break;
case SERVER_TYPE_WMI:
$title .= __('WMI server').' ID: '.$id_server;
break;
case SERVER_TYPE_EXPORT:
$title .= __('Export server').' ID: '.$id_server;
$id_modulo = 0;
break;
case SERVER_TYPE_INVENTORY:
$title .= __('Inventory server').' ID: '.$id_server;
break;
case SERVER_TYPE_WEB:
$title .= __('Web server').' ID: '.$id_server;
break;
case SERVER_TYPE_EVENT:
$title .= __('Event server').' ID: '.$id_server;
break;
case SERVER_TYPE_CORRELATION:
$title .= __('Correlation server').' ID: '.$id_server;
break;
case SERVER_TYPE_ENTERPRISE_ICMP:
$title .= __('Enterprise ICMP server').' ID: '.$id_server;
break;
case SERVER_TYPE_ENTERPRISE_SNMP:
$title .= __('Enterprise SNMP server').' ID: '.$id_server;
break;
case SERVER_TYPE_ENTERPRISE_SATELLITE:
$title .= __('Enterprise Satellite server').' ID: '.$id_server;
break;
case SERVER_TYPE_ENTERPRISE_TRANSACTIONAL:
$title .= __('Enterprise Transactional server').' ID: '.$id_server;
break;
case SERVER_TYPE_MAINFRAME:
$title .= __('Mainframe server').' ID: '.$id_server;
break;
case SERVER_TYPE_SYNC:
$title .= __('Sync server').' ID: '.$id_server;
break;
case SERVER_TYPE_WUX:
$title .= __('Wux server').' ID: '.$id_server;
break;
case SERVER_TYPE_SYSLOG:
$title .= __('Log server').' ID: '.$id_server;
break;
case SERVER_TYPE_NCM:
$title .= __('NCM server').' ID: '.$id_server;
break;
case SERVER_TYPE_AUTOPROVISION:
$title .= __('Autoprovision server').' ID: '.$id_server;
break;
case SERVER_TYPE_MIGRATION:
$title .= __('Migration server').' ID: '.$id_server;
break;
case SERVER_TYPE_ALERT:
$title .= __('Alert server').' ID: '.$id_server;
break;
case SERVER_TYPE_NETFLOW:
$title .= __('Netflow server').' ID: '.$id_server;
break;
default:
$title = __('Update server').' ID: '.$id_server;
break;
}
// Headers.
ui_print_standard_header(
__('Update Server'),
$title,
'images/gm_servers.png',
false,
'',
@ -65,8 +176,6 @@ if (isset($_GET['server']) === true) {
]
);
$sql = sprintf('SELECT name, ip_address, description, server_type, exec_proxy, port FROM tserver WHERE id_server = %d', $id_server);
$row = db_get_row_sql($sql);
echo '<form name="servers" method="POST" action="index.php?sec=gservers&sec2=godmode/servers/modificar_server&update=1">';
html_print_input_hidden('server', $id_server);

@ -189,7 +189,8 @@ $table->data[1][1] = html_print_label_input_block(
255,
true,
true
).' '.($license['limit_mode'] == 0 ? __('agents') : __('modules'))
)
// .' '.($license['limit_mode'] == 0 ? __('agents') : __('modules'))
);
$table->data[2][0] = html_print_label_input_block(
@ -202,7 +203,8 @@ $table->data[2][0] = html_print_label_input_block(
255,
true,
true
).' '.($license['limit_mode'] == 0 ? __('agents') : __('modules'))
)
// .' '.($license['limit_mode'] == 0 ? __('agents') : __('modules'))
);
$table->data[2][1] = html_print_label_input_block(
@ -215,7 +217,8 @@ $table->data[2][1] = html_print_label_input_block(
255,
true,
true
).' '.($license['limit_mode'] == 0 ? __('agents') : __('modules'))
)
// .' '.($license['limit_mode'] == 0 ? __('agents') : __('modules'))
);
$table->data[3][0] = html_print_label_input_block(
@ -228,7 +231,8 @@ $table->data[3][0] = html_print_label_input_block(
255,
true,
true
).' '.($license['limit_mode'] == 0 ? __('agents') : __('modules'))
)
// .' '.($license['limit_mode'] == 0 ? __('agents') : __('modules'))
);
$table->data[3][1] = html_print_label_input_block(
@ -325,6 +329,18 @@ if (enterprise_installed() || defined('DESTDIR')) {
],
true
);
$buttons .= html_print_button(
__('Show agent usage details'),
'agents_details',
false,
'show_agents_details_dialog()',
[
'fixed_id' => 'button-agents_details',
'icon' => 'next',
'mode' => 'secondary',
],
true
);
html_print_action_buttons(
$buttons
@ -369,3 +385,80 @@ if (enterprise_hook('print_activate_licence_dialog') == ENTERPRISE_NOT_HOOK) {
echo '</ul>';
echo '</div>';
}
$table = new stdClass();
$table->width = '100%';
$table->class = 'databox filter-table-adv';
$table->size = [];
$table->size[0] = '50%';
$table->size[1] = '50%';
$table->data = [];
$table->colspan = [];
$table->data[0][0] = html_print_label_input_block(
__('Total Agents'),
html_print_input_text(
'total_agents',
$total_agents,
'',
30,
255,
true,
true
)
);
$table->data[0][1] = html_print_label_input_block(
__('Network & other devices'),
html_print_input_text(
'type_network',
$network_others,
'',
30,
255,
true,
true
)
);
$table->data[1][0] = html_print_label_input_block(
__('Workstations'),
html_print_input_text(
'type_workstation',
$workstations,
'',
30,
255,
true,
true
)
);
$table->data[1][1] = html_print_label_input_block(
__('Servers'),
html_print_input_text(
'type_server',
$servers,
'',
30,
255,
true,
true
)
);
$table->data[2][0] = html_print_label_input_block(
__('Show disabled agents'),
html_print_checkbox_switch(
'show_disabled_agents',
1,
1,
true,
false,
'show_disabled_agents()'
)
);
echo '<div id="agents_details_dialog" class="invisible left" title="'.__('Agents usage details').'">';
html_print_table($table);
echo '</div>';

@ -210,7 +210,10 @@ if ((isset($_GET['form_add'])) or (isset($_GET['form_edit']))) {
echo '<td class="'.$tdcolor.' table_action_buttons"><a href="index.php?sec=gsetup&sec2=godmode/setup/links&id_link='.$row['id_link'].'&borrar='.$row['id_link'].'" onClick="if (!confirm(\' '.__('Are you sure?').'\')) return false;">'.html_print_image(
'images/delete.svg',
true,
['class' => 'invert_filter']
[
'class' => 'invert_filter main_menu_icon',
'title' => __('Delete'),
]
).'</a></td></tr>';
}

@ -419,6 +419,9 @@ ui_require_jquery_file('ui.datepicker-'.get_user_language(), 'include/javascript
// Include tiny for wysiwyg editor.
ui_require_javascript_file('tinymce', 'vendor/tinymce/tinymce/');
ui_require_javascript_file('pandora');
if ($config['style'] === 'pandora_black') {
html_print_input_hidden('selected_style_theme', 'pandora_black');
}
?>
<script language="javascript" type="text/javascript">
@ -443,8 +446,12 @@ ui_require_javascript_file('pandora');
changeYear: true,
showAnim: "slideDown"}
);
defineTinyMCE('#textarea_text');
var consoleStyle = $("#hidden-selected_style_theme").val();
if (consoleStyle == "pandora_black") {
defineTinyMCEDark('#textarea_text');
} else {
defineTinyMCE('#textarea_text');
}
$("#checkbox-expire").click(function() {
check_expire();
@ -462,5 +469,4 @@ ui_require_javascript_file('pandora');
$('#news-0-4').css('visibility', 'hidden');
}
}
</script>

@ -187,6 +187,27 @@ if (get_parameter('mark_notification_as_read', 0)) {
return;
}
if (get_parameter('mark_all_notification_as_read', 0)) {
$unread_messages = db_get_all_rows_sql('SELECT id_mensaje FROM tnotification_user WHERE utimestamp_read is NULL');
if ($unread_messages !== false) {
foreach ($unread_messages as $messages) {
messages_process_read($messages['id_mensaje']);
}
$result = true;
} else {
$result = false;
}
// If there is new messages, get the info.
echo json_encode(
['result' => $result]
);
return;
}
if (get_parameter('get_notifications_dropdown', 0)) {
echo notifications_print_dropdown();
return;

@ -759,6 +759,31 @@ if (enterprise_installed() === true) {
);
}
$days_week = [
0 => __('Sunday'),
1 => __('Monday'),
2 => __('Tuesday'),
3 => __('Wednesday'),
4 => __('Thursday'),
5 => __('Friday'),
6 => __('Saturday'),
];
$table_styles->data[$row][] = html_print_label_input_block(
__('Datepicker first day of week'),
html_print_select(
$days_week,
'datepicker_first_day',
$config['datepicker_first_day'],
'',
'',
false,
true,
false,
false
)
);
$row++;
// Title Header.
@ -1772,7 +1797,9 @@ $table_other->data[$row][] = html_print_label_input_block(
100,
true
).ui_print_input_placeholder(
__('Example').': '.date($config['date_format']),
__('Example').': '.date(
str_replace('&#x20;', ' ', $config['date_format'])
),
true
)
);
@ -1925,7 +1952,7 @@ $table_other->data[$row][] = html_print_label_input_block(
).html_print_div(
[
'class' => '',
'content' => __('Interval').html_print_select($units, 'interval_unit', 1, '', '', '', true, false, false, '', false, 'width: 100%'),
'content' => __('Interval').html_print_select($units, 'interval_unit', '', '', '', '', true, false, false, '', false, 'width: 100%'),
],
true
).html_print_button(
@ -1973,7 +2000,7 @@ $table_other->data[$row][] = html_print_label_input_block(
).html_print_button(
__('Delete'),
'interval_del_btn',
empty($config['interval_values']),
false,
'',
[
'mode' => 'link',
@ -2007,7 +2034,7 @@ $table_other->data[$row][] = html_print_label_input_block(
).html_print_div(
[
'class' => '',
'content' => __('Interval').html_print_select($units, 'interval_unit', 1, '', '', '', true, false, false, '', false, 'width: 100%'),
'content' => __('Interval').html_print_select($units, 'module_interval_unit', 1, '', '', '', true, false, false, '', false, 'width: 100%'),
],
true
).html_print_button(
@ -2314,9 +2341,15 @@ $(document).ready (function () {
// CUSTOM INTERVAL VALUES
//------------------------------------------------------------------
$("#button-interval_del_btn").click( function() {
var interval_selected = $('#intervals option:selected').val();
$('#hidden-interval_to_delete').val(interval_selected);
$('#submit-update_button').trigger('click');
confirmDialog({
title: "<?php echo __('Delete interval'); ?>",
message: "<?php echo __('This action is not reversible. Are you sure'); ?>",
onAccept: function() {
var interval_selected = $('#intervals option:selected').val();
$('#hidden-interval_to_delete').val(interval_selected);
$('#button-update_button').trigger('click');
}
});
});
$("#button-interval_add_btn").click( function() {

@ -2006,6 +2006,7 @@ if ($create_alert || $update_alert) {
'alt' => __('Update'),
'border' => 0,
'class' => 'main_menu_icon',
'title' => __('Edit'),
]
),
],
@ -2174,24 +2175,11 @@ if ($create_alert || $update_alert) {
echo '</form>';
}
echo '<div class="right">';
echo '<form name="agente" method="post" action="index.php?sec=snmpconsole&sec2=godmode/snmpconsole/snmp_alert">';
html_print_input_hidden('create_alert', 1);
$submitButton = html_print_submit_button(
__('Create'),
'alert',
false,
['icon' => 'wand'],
true
);
html_print_action_buttons($submitButton.$deleteButton, ['right_content' => $pagination]);
echo '</form></div>';
$legend = '<table id="legend_snmp_alerts"class="w100p"><td><div class="snmp_view_div w100p legend_white">';
$legend .= '<div class="display-flex"><div class="flex-50">';
$priorities = get_priorities();
$half = (count($priorities) / 2);
$count = 0;
$legend = '<table id="legend_snmp_alerts"class="w100p"><td><div class="snmp_view_div w100p legend_white">';
$legend .= '<div class="display-flex"><div class="flex-50">';
$priorities = get_priorities();
$half = (count($priorities) / 2);
$count = 0;
foreach ($priorities as $num => $name) {
if ($count == $half) {
$legend .= '</div><div class="mrgn_lft_5px flex-50">';
@ -2202,11 +2190,24 @@ if ($create_alert || $update_alert) {
$count++;
}
$legend .= '</div></div></div></td>';
$legend .= '</div></div></div></td></tr></table>';
ui_toggle($legend, __('Legend'));
ui_toggle($legend, __('Legend'));
unset($table);
unset($table);
echo '<div class="right">';
echo '<form name="agente" method="post" action="index.php?sec=snmpconsole&sec2=godmode/snmpconsole/snmp_alert">';
html_print_input_hidden('create_alert', 1);
$submitButton = html_print_submit_button(
__('Create'),
'alert',
false,
['icon' => 'wand'],
true
);
html_print_action_buttons($submitButton.$deleteButton, ['right_content' => $pagination]);
echo '</form></div>';
}
ui_require_javascript_file('pandora', 'include/javascript/', true);
@ -2311,7 +2312,7 @@ $(document).ready (function () {
// The row provided has a predefined class. We delete it.
$('#table_macros-field' + i)
.removeAttr('class');
if(old_value && i != 4){
if(old_value){
$("[name=field" + i + "_value]").val(old_value).trigger('change');
}
$('#table_macros-field').show();

@ -1628,7 +1628,6 @@ $autorefresh_list_out['operation/agentes/status_monitor'] = 'Monitor detail';
$autorefresh_list_out['enterprise/operation/services/services'] = 'Services';
$autorefresh_list_out['operation/dashboard/dashboard'] = 'Dashboard';
$autorefresh_list_out['operation/agentes/pandora_networkmap'] = 'Network map';
$autorefresh_list_out['operation/visual_console/render_view'] = 'Visual console';
$autorefresh_list_out['operation/events/events'] = 'Events';
@ -1643,6 +1642,10 @@ if (isset($autorefresh_list) === false || empty($autorefresh_list) === true || e
$aux = [];
$count_autorefresh_list = count($autorefresh_list);
for ($i = 0; $i < $count_autorefresh_list; $i++) {
if ($autorefresh_list[$i] === 'operation/agentes/pandora_networkmap') {
continue;
}
$aux[$autorefresh_list[$i]] = $autorefresh_list_out[$autorefresh_list[$i]];
unset($autorefresh_list_out[$autorefresh_list[$i]]);
$autorefresh_list[$i] = $aux;

@ -592,6 +592,9 @@ $userManagementTable->data['line2_looknfeel'][0] = html_print_select_from_sql(
true
);
// Hidden hint to change theme.
$hin_change_theme = ui_print_help_tip(__('When changing the theme, the login screen logo will be restricted to the default for that color scheme, if you have a custom logo, adjust it after changing the theme.'), true, '', '', 'display: none;');
if (is_metaconsole() === true) {
if (users_is_admin() === true) {
$userManagementTable->data['line1_looknfeel'][1] = $outputMetaAccess[0];
@ -599,7 +602,7 @@ if (is_metaconsole() === true) {
}
} else {
if (function_exists('skins_print_select')) {
$userManagementTable->data['line1_looknfeel'][1] = __('User color scheme');
$userManagementTable->data['line1_looknfeel'][1] = __('User color scheme').$hin_change_theme;
$userManagementTable->data['line2_looknfeel'][1] = skins_print_select($id_usr, 'skin', $user_info['id_skin'], '', __('None'), 0, true);
}
}
@ -817,5 +820,10 @@ $(document).ready(function () {
128,
128
);
//Hint to change theme.
$('#skin1').on("change", () => {
$('#advanced-line1_looknfeel-1 > a').css('display', 'block');
})
});
</script>

@ -67,6 +67,9 @@ class Applications extends Wizard
'index.php?sec=gservers&sec2=godmode/servers/discovery&wiz=app'
);
// Print Warning Message.
$this->printWarningMessage();
return $this;
}

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