Merge remote-tracking branch 'origin/develop' into ent-8447-conteo-erroneo-de-usuarios-en-index

This commit is contained in:
Calvo 2022-03-10 08:07:51 +01:00
commit 565cb588ac
1208 changed files with 80296 additions and 62615 deletions

3
.gitignore vendored
View File

@ -9,5 +9,6 @@ MYMETA.yml
**/PandoraFMS-Enterprise/pm_to_blib
**/pandora_console/attachment/cache
**/pandora_console/attachment/agents
**/pandora_console/attachment/merge_backups
pandora_console/.DS_Store
.DS_Store
.DS_Store

View File

@ -1,7 +1,25 @@
variables:
GIT_STRATEGY: clone
REBRANDING: pandora
test:
script:
- docker pull pandorafms/pandorafms-base:centos6
- docker run --rm -h pandorafms -t -v "$CI_PROJECT_DIR:/tmp/pandorafms" pandorafms/pandorafms-base:centos6 /tmp/pandorafms/tests/test.sh
- if [ ! -e $CI_PROJECT_DIR/pandora_server/bin/${REBRANDING}_server ]; then cp $CI_PROJECT_DIR/pandora_server/bin/pandora_server $CI_PROJECT_DIR/pandora_server/bin/${REBRANDING}_server ; fi
- if [ ! -e $CI_PROJECT_DIR/pandora_server/util/${REBRANDING}_ha.pl ]; then cp $CI_PROJECT_DIR/pandora_server/util/pandora_ha.pl $CI_PROJECT_DIR/pandora_server/util/${REBRANDING}_ha.pl ; fi
- if [ ! -e $CI_PROJECT_DIR/pandora_agents/unix/${REBRANDING}_agent ]; then cp $CI_PROJECT_DIR/pandora_agents/unix/pandora_agent $CI_PROJECT_DIR/pandora_agents/unix/${REBRANDING}_agent ; fi
- sed -i "s/pandora/$REBRANDING/g" $CI_PROJECT_DIR/pandora_agents/unix/${REBRANDING}_agent
- if [ ! -e $CI_PROJECT_DIR/pandora_agents/unix/${REBRANDING}_agent_exec ]; then cp $CI_PROJECT_DIR/pandora_agents/unix/pandora_agent_exec $CI_PROJECT_DIR/pandora_agents/unix/${REBRANDING}_agent_exec ; fi
- if [ ! -e $CI_PROJECT_DIR/pandora_agents/unix/${REBRANDING}_revent ]; then cp $CI_PROJECT_DIR/pandora_agents/unix/pandora_revent $CI_PROJECT_DIR/pandora_agents/unix/${REBRANDING}_revent ; fi
- if [ ! -e $CI_PROJECT_DIR/pandora_agents/unix/${REBRANDING}_agent_logrotate ]; then cp $CI_PROJECT_DIR/pandora_agents/unix/pandora_agent_logrotate $CI_PROJECT_DIR/pandora_agents/unix/${REBRANDING}_agent_logrotate ; fi
- sed -i "s/_PRODUCT_/$REBRANDING/g" $CI_PROJECT_DIR/pandora_server/Makefile.PL
- sed -i "s/TENTACLE_USER=\"pandora\"/TENTACLE_USER=\"$REBRANDING\"/g" $CI_PROJECT_DIR/pandora_server/util/tentacle_serverd
- docker pull pandorafms/pandorafms-base:rocky8.5
- docker run --rm -e REBRANDING="$REBRANDING" -h pandorafms -t -v "$CI_PROJECT_DIR:/tmp/pandorafms" pandorafms/pandorafms-base:rocky8.5 /tmp/pandorafms/tests/test.sh
test_php_legacy:
stage: test
before_script:
- df -h | grep instaladores | awk '{print $NF}' |xargs umount >/dev/null 2>&1 || true
script:
- docker pull pandorafms/pandorafms-base:centos7
- docker run --rm -h pandorafms -t -v "$CI_PROJECT_DIR:/tmp/pandorafms" pandorafms/pandorafms-base:centos7 /tmp/pandorafms/tests/test_legacy.sh

View File

@ -2,8 +2,7 @@
![logo Pandora-FMS](https://user-images.githubusercontent.com/8567291/151817953-dc9c4c88-5f3c-459b-98a7-da0534930a2c.png)
With more than 50,000 customer installations across the five continents, Pandora FMS is an out-of-the-box monitoring solution: profitable and scalable, covering most infrastructure deployment options.
With more than 50,000 customer installations across the five continents, Pandora FMS is an out-of-the-box monitoring solution: profitable and scalable, covering most infrastructure deployment options.
Pandora FMS gives you the agility to find and solve problems quickly, scaling them so they can be derived from any source, on-premise, multi cloud or both of them mixed. Now you have that capability across your entire IT stack and analytics to find any problem, even the ones that are hard to find.

View File

@ -1,11 +1,12 @@
FROM pandorafms/pandorafms-base
FROM pandorafms/pandorafms-base:centos7
# Build variables.
ARG BRANCH=develop
ARG DB_PASS=pandora
# Clone the Pandora FMS repo.
RUN git clone --depth 1 -b "$BRANCH" https://github.com/pandorafms/pandorafms.git /tmp/pandorafms
RUN git clone --depth 1 -b "$BRANCH" https://github.com/pandorafms/pandorafms.git /tmp/pandorafms || \
git clone --depth 1 -b develop https://github.com/pandorafms/pandorafms.git /tmp/pandorafms
# Install the Pandora FMS Server.
RUN cd /tmp/pandorafms/pandora_server && \
@ -21,21 +22,27 @@ RUN cd /tmp/pandorafms/pandora_agents/unix && \
RUN sed -i "s/#ServerName.*/ServerName localhost:80/" /etc/httpd/conf/httpd.conf
# Install the Pandora FMS Console.
RUN service mysqld start && \
/usr/bin/mysqladmin -u root password "$DB_PASS" && \
service httpd start && \
cp -r /tmp/pandorafms/pandora_console /var/www/html && \
chown -R apache.apache /var/www/html/pandora_console/ && \
python /tmp/pandorafms/tests/install_console.py
RUN rm -rf /var/lib/mysql && mkdir -p /var/lib/mysql && \
mkdir -p /var/log/mysql/ && chown mysql. /var/log/mysql && \
chown mysql. -R /var/lib/mysql && \
sudo -u mysql mysqld --initialize --explicit_defaults_for_timestamp && \
sudo -u mysql mysqld --daemonize & \
sleep 50 && \
mysql_default_pass=$(cat /var/log/mysqld.log | grep "temporary password" | awk '{print $NF}') && \
mysqladmin -u root -p"$mysql_default_pass" --user=root password 'pandora' && \
httpd -k start && \
cp -r /tmp/pandorafms/pandora_console /var/www/html && \
chown -R apache.apache /var/www/html/pandora_console/ && \
python /tmp/pandorafms/tests/install_console.py
# Redirect HTTP requests to / to the Pandora FMS Console.
RUN echo '<meta http-equiv="refresh" content="0;url=/pandora_console">' > /var/www/html/index.html
# Create the entrypoint script.
RUN echo -e '#/bin/bash\n \
service mysqld start &&\n \
service httpd start &&\n \
service crond start &&\n \
sudo -u mysql mysqld --daemonize &&\n \
httpd -k start &&\n \
/usr/sbin/crond &&\n \
/etc/init.d/pandora_agent_daemon start && \
/etc/init.d/pandora_server start && \
tail -f /var/log/pandora/pandora_server.log' \

View File

@ -1,5 +1,5 @@
package: pandorafms-agent-unix
Version: 7.0NG.760-220217
Version: 7.0NG.760-220310
Architecture: all
Priority: optional
Section: admin

View File

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

View File

@ -39,7 +39,7 @@ BEGIN {
use File::Copy;
use Scalar::Util qw(looks_like_number);
use lib '/usr/lib/perl5';
BEGIN { push @INC, '/usr/lib/perl5'; }
################################################################################
# Erase blank spaces before and after the string
@ -312,7 +312,7 @@ BEGIN {
$YAML = 1;
}
use lib '/usr/lib/perl5';
BEGIN { push @INC, '/usr/lib/perl5'; }
our @ISA = ("Exporter");
our %EXPORT_TAGS = ( 'all' => [ qw( ) ] );
@ -1003,7 +1003,7 @@ use IO::Socket;
use Sys::Syslog;
use Time::Local;
use lib '/usr/lib/perl5';
BEGIN { push @INC, '/usr/lib/perl5'; }
# Agent XML data
my $Xml;
@ -1015,7 +1015,7 @@ my $Sem = undef;
my $ThreadSem = undef;
use constant AGENT_VERSION => '7.0NG.760';
use constant AGENT_BUILD => '220217';
use constant AGENT_BUILD => '220310';
# Agent log default file size maximum and instances
use constant DEFAULT_MAX_LOG_SIZE => 600000;

View File

@ -3,7 +3,7 @@
#
%define name pandorafms_agent_unix
%define version 7.0NG.760
%define release 220217
%define release 220310
Summary: Pandora FMS Linux agent, PERL version
Name: %{name}

View File

@ -3,7 +3,7 @@
#
%define name pandorafms_agent_unix
%define version 7.0NG.760
%define release 220217
%define release 220310
Summary: Pandora FMS Linux agent, PERL version
Name: %{name}

View File

@ -42,6 +42,8 @@ pidof_pandora () {
elif [ "$OS_NAME" = "SunOS" ]
then
ZONENAME_CMD="/bin/zonename"
# Has to be run from sources. The binary version inserts blanks between
# $DAEMON and $PANDORA_PATH.
TRUNCATED_DAEMON=`echo "$DAEMON $PANDORA_PATH" | cut -c1-20`
if [ -x $ZONENAME_CMD ]
then
@ -59,7 +61,7 @@ pidof_pandora () {
then
# Virtuozzo/OpenVZ
local _pid _ctid _pids
_pids=`ps -Af | grep "$DAEMON $PANDORA_PATH" | grep -v grep | awk '{ print $2 }'`
_pids=`ps -Af | grep "$DAEMON" | grep "$PANDORA_PATH" | grep -v grep | awk '{ print $2 }'`
[ "$_pids" ] && for _pid in $_pids
do
_ctid=`/usr/sbin/vzpid $_pid | awk '$1 == '$_pid' { print $2 }'`
@ -71,9 +73,9 @@ pidof_pandora () {
done
elif [ "$OS_NAME" = "AIX" ]; then
# AIX
PANDORA_PID=`ps -ef | grep "$DAEMON $PANDORA_PATH" | grep -v grep | awk '{ print $2 }'`
PANDORA_PID=`ps -ef | grep "$DAEMON" | grep "$PANDORA_PATH" | grep -v grep | awk '{ print $2 }'`
else
PANDORA_PID=`ps -Afw | grep "$DAEMON $PANDORA_PATH" | grep -v grep | awk '{ print $2 }'`
PANDORA_PID=`ps -Afw | grep "$DAEMON" | grep "$PANDORA_PATH" | grep -v grep | awk '{ print $2 }'`
fi
echo $PANDORA_PID

View File

@ -10,7 +10,7 @@
# **********************************************************************
PI_VERSION="7.0NG.760"
PI_BUILD="220217"
PI_BUILD="220310"
OS_NAME=`uname -s`
FORCE=0

View File

@ -14,7 +14,7 @@ use strict;
use LWP::Simple;
use LWP::UserAgent;
use MIME::Base64;
use lib '/usr/lib/perl5';
BEGIN { push @INC, '/usr/lib/perl5'; }
use PandoraFMS::Tools;
# Init

View File

@ -186,7 +186,7 @@ UpgradeApplicationID
{}
Version
{220217}
{220310}
ViewReadme
{Yes}

View File

@ -11,7 +11,7 @@ use strict;
use warnings;
use File::Basename;
use lib '/usr/lib/perl5';
BEGIN { push @INC, '/usr/lib/perl5'; }
use PandoraFMS::PluginTools;
use PandoraFMS::Omnishell;

View File

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

View File

@ -11,7 +11,7 @@ BEGIN
VALUE "LegalCopyright", "Artica ST"
VALUE "OriginalFilename", "PandoraAgent.exe"
VALUE "ProductName", "Pandora FMS Windows Agent"
VALUE "ProductVersion", "(7.0NG.760(Build 220217))"
VALUE "ProductVersion", "(7.0NG.760(Build 220310))"
VALUE "FileVersion", "1.0.0.0"
END
END

View File

@ -1,5 +1,5 @@
package: pandorafms-console
Version: 7.0NG.760-220217
Version: 7.0NG.760-220310
Architecture: all
Priority: optional
Section: admin

View File

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

View File

@ -7,8 +7,13 @@
"email": "info@artica.es"
}
],
"config": {
"platform": {
"php": "7.2.0"
}
},
"require": {
"mpdf/mpdf": "^7.1",
"mpdf/mpdf": "^8.0.15",
"swiftmailer/swiftmailer": "^6.0"
},
"autoload": {

View File

@ -4,34 +4,35 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "18364e5cd8c79657279985942190b4a7",
"content-hash": "1ca1e8936d9ffb13f23a5b5cefbf02ad",
"packages": [
{
"name": "doctrine/lexer",
"version": "v1.0.1",
"version": "1.2.2",
"source": {
"type": "git",
"url": "https://github.com/doctrine/lexer.git",
"reference": "83893c552fd2045dd78aef794c31e694c37c0b8c"
"reference": "9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c",
"reference": "83893c552fd2045dd78aef794c31e694c37c0b8c",
"url": "https://api.github.com/repos/doctrine/lexer/zipball/9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c",
"reference": "9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c",
"shasum": ""
},
"require": {
"php": ">=5.3.2"
"php": "^7.1 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^9.0",
"phpstan/phpstan": "1.3",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"vimeo/psalm": "^4.11"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-0": {
"Doctrine\\Common\\Lexer\\": "lib/"
"psr-4": {
"Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer"
}
},
"notification-url": "https://packagist.org/downloads/",
@ -39,49 +40,71 @@
"MIT"
],
"authors": [
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Johannes Schmitt",
"email": "schmittjoh@gmail.com"
}
],
"description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.",
"homepage": "http://www.doctrine-project.org",
"description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
"homepage": "https://www.doctrine-project.org/projects/lexer.html",
"keywords": [
"annotations",
"docblock",
"lexer",
"parser"
"parser",
"php"
],
"time": "2014-09-09T13:34:57+00:00"
"support": {
"issues": "https://github.com/doctrine/lexer/issues",
"source": "https://github.com/doctrine/lexer/tree/1.2.2"
},
"funding": [
{
"url": "https://www.doctrine-project.org/sponsorship.html",
"type": "custom"
},
{
"url": "https://www.patreon.com/phpdoctrine",
"type": "patreon"
},
{
"url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer",
"type": "tidelift"
}
],
"time": "2022-01-12T08:27:12+00:00"
},
{
"name": "egulias/email-validator",
"version": "2.1.6",
"version": "3.1.2",
"source": {
"type": "git",
"url": "https://github.com/egulias/EmailValidator.git",
"reference": "0578b32b30b22de3e8664f797cf846fc9246f786"
"reference": "ee0db30118f661fb166bcffbf5d82032df484697"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0578b32b30b22de3e8664f797cf846fc9246f786",
"reference": "0578b32b30b22de3e8664f797cf846fc9246f786",
"url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ee0db30118f661fb166bcffbf5d82032df484697",
"reference": "ee0db30118f661fb166bcffbf5d82032df484697",
"shasum": ""
},
"require": {
"doctrine/lexer": "^1.0.1",
"php": ">= 5.5"
"doctrine/lexer": "^1.2",
"php": ">=7.2",
"symfony/polyfill-intl-idn": "^1.15"
},
"require-dev": {
"dominicsayers/isemail": "dev-master",
"phpunit/phpunit": "^4.8.35||^5.7||^6.0",
"satooshi/php-coveralls": "^1.0.1"
"php-coveralls/php-coveralls": "^2.2",
"phpunit/phpunit": "^8.5.8|^9.3.3",
"vimeo/psalm": "^4"
},
"suggest": {
"ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
@ -89,12 +112,12 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.0.x-dev"
"dev-master": "3.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Egulias\\EmailValidator\\": "EmailValidator"
"Egulias\\EmailValidator\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@ -115,36 +138,47 @@
"validation",
"validator"
],
"time": "2018-09-25T20:47:26+00:00"
"support": {
"issues": "https://github.com/egulias/EmailValidator/issues",
"source": "https://github.com/egulias/EmailValidator/tree/3.1.2"
},
"funding": [
{
"url": "https://github.com/egulias",
"type": "github"
}
],
"time": "2021-10-11T09:18:27+00:00"
},
{
"name": "mpdf/mpdf",
"version": "v7.1.5",
"version": "v8.0.15",
"source": {
"type": "git",
"url": "https://github.com/mpdf/mpdf.git",
"reference": "2ed29c3a59fa23e77052e9d7fa7e31c707fb7502"
"reference": "d8a5294a6cc2e814c4157aecc8d7ac25014b18ed"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/mpdf/mpdf/zipball/2ed29c3a59fa23e77052e9d7fa7e31c707fb7502",
"reference": "2ed29c3a59fa23e77052e9d7fa7e31c707fb7502",
"url": "https://api.github.com/repos/mpdf/mpdf/zipball/d8a5294a6cc2e814c4157aecc8d7ac25014b18ed",
"reference": "d8a5294a6cc2e814c4157aecc8d7ac25014b18ed",
"shasum": ""
},
"require": {
"ext-gd": "*",
"ext-mbstring": "*",
"myclabs/deep-copy": "^1.7",
"paragonie/random_compat": "^1.4|^2.0|9.99.99",
"php": "^5.6 || ~7.0.0 || ~7.1.0 || ~7.2.0",
"psr/log": "^1.0",
"setasign/fpdi": "1.6.*"
"paragonie/random_compat": "^1.4|^2.0|^9.99.99",
"php": "^5.6 || ^7.0 || ~8.0.0 || ~8.1.0",
"psr/log": "^1.0 || ^2.0",
"setasign/fpdi": "^2.1"
},
"require-dev": {
"mockery/mockery": "^0.9.5",
"phpunit/phpunit": "^5.0",
"squizlabs/php_codesniffer": "^2.7.0",
"tracy/tracy": "^2.4"
"mockery/mockery": "^1.3.0",
"mpdf/qrcode": "^1.1.0",
"squizlabs/php_codesniffer": "^3.5.0",
"tracy/tracy": "^2.4",
"yoast/phpunit-polyfills": "^1.0"
},
"suggest": {
"ext-bcmath": "Needed for generation of some types of barcodes",
@ -152,11 +186,6 @@
"ext-zlib": "Needed for compression of embedded resources, such as fonts"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-development": "7.0-dev"
}
},
"autoload": {
"psr-4": {
"Mpdf\\": "src/"
@ -176,36 +205,47 @@
"role": "Developer (retired)"
}
],
"description": "A PHP class to generate PDF files from HTML with Unicode/UTF-8 and CJK support",
"description": "PHP library generating PDF files from UTF-8 encoded HTML",
"homepage": "https://mpdf.github.io",
"keywords": [
"pdf",
"php",
"utf-8"
],
"time": "2018-09-19T09:58:39+00:00"
"support": {
"docs": "http://mpdf.github.io",
"issues": "https://github.com/mpdf/mpdf/issues",
"source": "https://github.com/mpdf/mpdf"
},
"funding": [
{
"url": "https://www.paypal.me/mpdf",
"type": "custom"
}
],
"time": "2021-11-10T08:15:22+00:00"
},
{
"name": "myclabs/deep-copy",
"version": "1.7.0",
"version": "1.10.2",
"source": {
"type": "git",
"url": "https://github.com/myclabs/DeepCopy.git",
"reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e"
"reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e",
"reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e",
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220",
"reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220",
"shasum": ""
},
"require": {
"php": "^5.6 || ^7.0"
"php": "^7.1 || ^8.0"
},
"require-dev": {
"doctrine/collections": "^1.0",
"doctrine/common": "^2.6",
"phpunit/phpunit": "^4.1"
"phpunit/phpunit": "^7.1"
},
"type": "library",
"autoload": {
@ -228,24 +268,34 @@
"object",
"object graph"
],
"time": "2017-10-19T19:58:43+00:00"
"support": {
"issues": "https://github.com/myclabs/DeepCopy/issues",
"source": "https://github.com/myclabs/DeepCopy/tree/1.10.2"
},
"funding": [
{
"url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
"type": "tidelift"
}
],
"time": "2020-11-13T09:40:50+00:00"
},
{
"name": "paragonie/random_compat",
"version": "v9.99.99",
"version": "v9.99.100",
"source": {
"type": "git",
"url": "https://github.com/paragonie/random_compat.git",
"reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95"
"reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
"reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
"url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a",
"reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a",
"shasum": ""
},
"require": {
"php": "^7"
"php": ">= 7"
},
"require-dev": {
"phpunit/phpunit": "4.*|5.*",
@ -273,20 +323,25 @@
"pseudorandom",
"random"
],
"time": "2018-07-02T15:55:56+00:00"
"support": {
"email": "info@paragonie.com",
"issues": "https://github.com/paragonie/random_compat/issues",
"source": "https://github.com/paragonie/random_compat"
},
"time": "2020-10-15T08:29:30+00:00"
},
{
"name": "psr/log",
"version": "1.0.2",
"version": "1.1.4",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
"reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
"reference": "d49695b909c3b7628b6289db5479a1c204601f11"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
"reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
"url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
"reference": "d49695b909c3b7628b6289db5479a1c204601f11",
"shasum": ""
},
"require": {
@ -295,7 +350,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
"dev-master": "1.1.x-dev"
}
},
"autoload": {
@ -310,7 +365,7 @@
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
"homepage": "https://www.php-fig.org/"
}
],
"description": "Common interface for logging libraries",
@ -320,36 +375,47 @@
"psr",
"psr-3"
],
"time": "2016-10-10T12:19:37+00:00"
"support": {
"source": "https://github.com/php-fig/log/tree/1.1.4"
},
"time": "2021-05-03T11:20:27+00:00"
},
{
"name": "setasign/fpdi",
"version": "1.6.2",
"version": "v2.3.6",
"source": {
"type": "git",
"url": "https://github.com/Setasign/FPDI.git",
"reference": "a6ad58897a6d97cc2d2cd2adaeda343b25a368ea"
"reference": "6231e315f73e4f62d72b73f3d6d78ff0eed93c31"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Setasign/FPDI/zipball/a6ad58897a6d97cc2d2cd2adaeda343b25a368ea",
"reference": "a6ad58897a6d97cc2d2cd2adaeda343b25a368ea",
"url": "https://api.github.com/repos/Setasign/FPDI/zipball/6231e315f73e4f62d72b73f3d6d78ff0eed93c31",
"reference": "6231e315f73e4f62d72b73f3d6d78ff0eed93c31",
"shasum": ""
},
"require": {
"ext-zlib": "*",
"php": "^5.6 || ^7.0 || ^8.0"
},
"conflict": {
"setasign/tfpdf": "<1.31"
},
"require-dev": {
"phpunit/phpunit": "~5.7",
"setasign/fpdf": "~1.8",
"setasign/tfpdf": "1.31",
"squizlabs/php_codesniffer": "^3.5",
"tecnickcom/tcpdf": "~6.2"
},
"suggest": {
"setasign/fpdf": "FPDI will extend this class but as it is also possible to use \"tecnickcom/tcpdf\" as an alternative there's no fixed dependency configured.",
"setasign/fpdi-fpdf": "Use this package to automatically evaluate dependencies to FPDF.",
"setasign/fpdi-tcpdf": "Use this package to automatically evaluate dependencies to TCPDF."
"setasign/fpdf": "FPDI will extend this class but as it is also possible to use TCPDF or tFPDF as an alternative. There's no fixed dependency configured."
},
"type": "library",
"autoload": {
"classmap": [
"filters/",
"fpdi.php",
"fpdf_tpl.php",
"fpdi_pdf_parser.php",
"pdf_context.php"
]
"psr-4": {
"setasign\\Fpdi\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@ -360,6 +426,11 @@
"name": "Jan Slabon",
"email": "jan.slabon@setasign.com",
"homepage": "https://www.setasign.com"
},
{
"name": "Maximilian Kresse",
"email": "maximilian.kresse@setasign.com",
"homepage": "https://www.setasign.com"
}
],
"description": "FPDI is a collection of PHP classes facilitating developers to read pages from existing PDF documents and use them as templates in FPDF. Because it is also possible to use FPDI with TCPDF, there are no fixed dependencies defined. Please see suggestions for packages which evaluates the dependencies automatically.",
@ -369,38 +440,50 @@
"fpdi",
"pdf"
],
"time": "2017-05-11T14:25:49+00:00"
"support": {
"issues": "https://github.com/Setasign/FPDI/issues",
"source": "https://github.com/Setasign/FPDI/tree/v2.3.6"
},
"funding": [
{
"url": "https://tidelift.com/funding/github/packagist/setasign/fpdi",
"type": "tidelift"
}
],
"time": "2021-02-11T11:37:01+00:00"
},
{
"name": "swiftmailer/swiftmailer",
"version": "v6.1.3",
"version": "v6.3.0",
"source": {
"type": "git",
"url": "https://github.com/swiftmailer/swiftmailer.git",
"reference": "8ddcb66ac10c392d3beb54829eef8ac1438595f4"
"reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8ddcb66ac10c392d3beb54829eef8ac1438595f4",
"reference": "8ddcb66ac10c392d3beb54829eef8ac1438595f4",
"url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8a5d5072dca8f48460fce2f4131fcc495eec654c",
"reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c",
"shasum": ""
},
"require": {
"egulias/email-validator": "~2.0",
"php": ">=7.0.0"
"egulias/email-validator": "^2.0|^3.1",
"php": ">=7.0.0",
"symfony/polyfill-iconv": "^1.0",
"symfony/polyfill-intl-idn": "^1.10",
"symfony/polyfill-mbstring": "^1.0"
},
"require-dev": {
"mockery/mockery": "~0.9.1",
"symfony/phpunit-bridge": "~3.3@dev"
"mockery/mockery": "^1.0",
"symfony/phpunit-bridge": "^4.4|^5.4"
},
"suggest": {
"ext-intl": "Needed to support internationalized email addresses",
"true/punycode": "Needed to support internationalized email addresses, if ext-intl is not installed"
"ext-intl": "Needed to support internationalized email addresses"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "6.1-dev"
"dev-master": "6.2-dev"
}
},
"autoload": {
@ -428,7 +511,435 @@
"mail",
"mailer"
],
"time": "2018-09-11T07:12:52+00:00"
"support": {
"issues": "https://github.com/swiftmailer/swiftmailer/issues",
"source": "https://github.com/swiftmailer/swiftmailer/tree/v6.3.0"
},
"funding": [
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/swiftmailer/swiftmailer",
"type": "tidelift"
}
],
"abandoned": "symfony/mailer",
"time": "2021-10-18T15:26:12+00:00"
},
{
"name": "symfony/polyfill-iconv",
"version": "v1.24.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-iconv.git",
"reference": "f1aed619e28cb077fc83fac8c4c0383578356e40"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/f1aed619e28cb077fc83fac8c4c0383578356e40",
"reference": "f1aed619e28cb077fc83fac8c4c0383578356e40",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"provide": {
"ext-iconv": "*"
},
"suggest": {
"ext-iconv": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.23-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Iconv\\": ""
},
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for the Iconv extension",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"iconv",
"polyfill",
"portable",
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-iconv/tree/v1.24.0"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2022-01-04T09:04:05+00:00"
},
{
"name": "symfony/polyfill-intl-idn",
"version": "v1.24.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-idn.git",
"reference": "749045c69efb97c70d25d7463abba812e91f3a44"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/749045c69efb97c70d25d7463abba812e91f3a44",
"reference": "749045c69efb97c70d25d7463abba812e91f3a44",
"shasum": ""
},
"require": {
"php": ">=7.1",
"symfony/polyfill-intl-normalizer": "^1.10",
"symfony/polyfill-php72": "^1.10"
},
"suggest": {
"ext-intl": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.23-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Intl\\Idn\\": ""
},
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Laurent Bassin",
"email": "laurent@bassin.info"
},
{
"name": "Trevor Rowbotham",
"email": "trevor.rowbotham@pm.me"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"idn",
"intl",
"polyfill",
"portable",
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.24.0"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2021-09-14T14:02:44+00:00"
},
{
"name": "symfony/polyfill-intl-normalizer",
"version": "v1.24.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
"reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8",
"reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"suggest": {
"ext-intl": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.23-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Intl\\Normalizer\\": ""
},
"files": [
"bootstrap.php"
],
"classmap": [
"Resources/stubs"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for intl's Normalizer class and related functions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"intl",
"normalizer",
"polyfill",
"portable",
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.24.0"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2021-02-19T12:13:01+00:00"
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.24.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825",
"reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"provide": {
"ext-mbstring": "*"
},
"suggest": {
"ext-mbstring": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.23-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Mbstring\\": ""
},
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for the Mbstring extension",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"mbstring",
"polyfill",
"portable",
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.24.0"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2021-11-30T18:21:41+00:00"
},
{
"name": "symfony/polyfill-php72",
"version": "v1.24.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php72.git",
"reference": "9a142215a36a3888e30d0a9eeea9766764e96976"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976",
"reference": "9a142215a36a3888e30d0a9eeea9766764e96976",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.23-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Php72\\": ""
},
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"polyfill",
"portable",
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php72/tree/v1.24.0"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2021-05-27T09:17:38+00:00"
}
],
"packages-dev": [],
@ -438,5 +949,9 @@
"prefer-stable": false,
"prefer-lowest": false,
"platform": [],
"platform-dev": []
"platform-dev": [],
"platform-overrides": {
"php": "7.2.0"
},
"plugin-api-version": "2.2.0"
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,515 @@
[
[{ "1613": 0, "1616": 1, "1621": 2 }],
[
{
"1557": 0,
"1611": 1,
"1612": 2,
"1614": 3,
"1615": 4,
"1617": 5,
"1618": 6,
"1619": 7,
"1620": 8,
"1623": 9,
"1626": 10,
"1648": 11,
"57990": 12,
"57991": 13,
"57992": 14,
"57993": 15,
"57994": 16,
"57995": 17,
"57996": 18,
"57997": 19
}
],
[{ "3768": 0, "3769": 1 }],
[{ "3784": 0, "3785": 1, "3786": 2, "3787": 3, "3788": 4, "3789": 5 }],
[
{
"790": 0,
"791": 1,
"792": 2,
"793": 3,
"796": 4,
"797": 5,
"798": 6,
"799": 7,
"800": 8,
"803": 9,
"804": 10,
"805": 11,
"806": 12,
"809": 13,
"810": 14,
"811": 15,
"812": 16,
"813": 17,
"814": 18,
"815": 19,
"816": 20,
"817": 21,
"825": 22,
"826": 23,
"827": 24,
"828": 25,
"839": 26,
"840": 27,
"841": 28,
"845": 29,
"846": 30,
"851": 31,
"858": 32
},
{
"768": 0,
"769": 1,
"770": 2,
"771": 3,
"772": 4,
"773": 5,
"774": 6,
"775": 7,
"776": 8,
"777": 9,
"778": 10,
"779": 11,
"780": 12,
"781": 13,
"782": 14,
"783": 15,
"784": 16,
"785": 17,
"829": 18,
"831": 19,
"832": 20,
"833": 21,
"834": 22,
"836": 23,
"838": 24,
"842": 25,
"843": 26,
"844": 27,
"849": 28,
"850": 29,
"855": 30,
"7620": 31,
"7621": 32,
"7622": 33,
"7623": 34,
"7624": 35,
"7625": 36,
"8400": 37,
"8401": 38,
"8406": 39,
"8407": 40,
"8411": 41,
"8412": 42,
"8417": 43,
"57895": 44,
"57896": 45,
"57897": 46,
"57898": 47,
"57899": 48,
"57900": 49,
"57901": 50,
"57902": 51,
"57903": 52,
"57904": 53,
"57905": 54,
"58088": 55
}
],
[
{
"1456": 0,
"1457": 1,
"1458": 2,
"1459": 3,
"1460": 4,
"1461": 5,
"1462": 6,
"1463": 7,
"1464": 8,
"1467": 9,
"1469": 10,
"1479": 11,
"1613": 12,
"1616": 13,
"1621": 14
}
],
[
{
"1456": 0,
"1457": 1,
"1458": 2,
"1459": 3,
"1460": 4,
"1461": 5,
"1462": 6,
"1463": 7,
"1464": 8,
"1467": 9,
"1469": 10,
"1479": 11,
"1613": 12,
"1616": 13,
"1621": 14,
"2034": 15
}
],
[{ "1468": 0 }],
[
{
"1471": 0,
"1557": 1,
"1611": 2,
"1612": 3,
"1614": 4,
"1615": 5,
"1617": 6,
"1618": 7,
"1619": 8,
"1620": 9,
"1623": 10,
"1626": 11,
"1648": 12,
"64286": 13,
"57990": 14,
"57991": 15,
"57992": 16,
"57993": 17,
"57994": 18,
"57995": 19,
"57996": 20,
"57997": 21
}
],
[
{
"1471": 0,
"1557": 1,
"1611": 2,
"1612": 3,
"1614": 4,
"1615": 5,
"1617": 6,
"1618": 7,
"1619": 8,
"1620": 9,
"1623": 10,
"1626": 11,
"1648": 12,
"2027": 13,
"2028": 14,
"2029": 15,
"2030": 16,
"2031": 17,
"2032": 18,
"2033": 19,
"2035": 20,
"64286": 21,
"57990": 22,
"57991": 23,
"57992": 24,
"57993": 25,
"57994": 26,
"57995": 27,
"57996": 28,
"57997": 29
}
],
[{ "3768": 0, "3769": 1, "3772": 2 }],
[
{
"3761": 0,
"3764": 1,
"3765": 2,
"3766": 3,
"3767": 4,
"3771": 5,
"3784": 6,
"3785": 7,
"3786": 8,
"3787": 9,
"3788": 10,
"3789": 11
}
],
[
{
"790": 0,
"791": 1,
"792": 2,
"793": 3,
"796": 4,
"797": 5,
"798": 6,
"799": 7,
"800": 8,
"803": 9,
"804": 10,
"805": 11,
"806": 12,
"809": 13,
"810": 14,
"811": 15,
"812": 16,
"813": 17,
"814": 18,
"815": 19,
"816": 20,
"817": 21,
"818": 22,
"819": 23,
"825": 24,
"826": 25,
"827": 26,
"828": 27,
"839": 28,
"840": 29,
"841": 30,
"845": 31,
"846": 32,
"851": 33,
"858": 34
}
],
[
{ "65057": 0, "65059": 1 },
{ "768": 0, "769": 1 },
{ "807": 0 },
{
"790": 0,
"791": 1,
"792": 2,
"793": 3,
"796": 4,
"797": 5,
"798": 6,
"799": 7,
"800": 8,
"803": 9,
"804": 10,
"805": 11,
"806": 12,
"809": 13,
"810": 14,
"811": 15,
"812": 16,
"813": 17,
"814": 18,
"815": 19,
"816": 20,
"817": 21,
"818": 22,
"819": 23,
"825": 24,
"826": 25,
"827": 26,
"828": 27,
"839": 28,
"840": 29,
"841": 30,
"845": 31,
"846": 32,
"851": 33,
"858": 34
},
{
"768": 0,
"769": 1,
"770": 2,
"771": 3,
"772": 4,
"773": 5,
"774": 6,
"775": 7,
"776": 8,
"777": 9,
"778": 10,
"779": 11,
"780": 12,
"781": 13,
"782": 14,
"783": 15,
"784": 16,
"785": 17,
"786": 18,
"787": 19,
"788": 20,
"829": 21,
"830": 22,
"831": 23,
"832": 24,
"833": 25,
"834": 26,
"836": 27,
"838": 28,
"842": 29,
"843": 30,
"844": 31,
"849": 32,
"850": 33,
"855": 34,
"1155": 35,
"1156": 36,
"1157": 37,
"1158": 38,
"1159": 39,
"7620": 40,
"7621": 41,
"7622": 42,
"7623": 43,
"7624": 44,
"7625": 45,
"8400": 46,
"8401": 47,
"8406": 48,
"8407": 49,
"8411": 50,
"8412": 51,
"8417": 52,
"57895": 53,
"57896": 54,
"57897": 55,
"57898": 56,
"57899": 57,
"57900": 58,
"57901": 59,
"57902": 60,
"57903": 61,
"57904": 62,
"57905": 63,
"58088": 64
},
{ "808": 0 }
],
[
{
"45": 0,
"65": 1,
"66": 2,
"67": 3,
"68": 4,
"70": 5,
"71": 6,
"72": 7,
"74": 8,
"75": 9,
"76": 10,
"79": 11,
"80": 12,
"81": 13,
"82": 14,
"83": 15,
"84": 16,
"85": 17,
"86": 18,
"87": 19,
"88": 20,
"89": 21,
"90": 22,
"101": 23,
"102": 24,
"107": 25,
"110": 26,
"111": 27,
"114": 28,
"118": 29,
"119": 30,
"120": 31,
"121": 32,
"171": 33,
"187": 34,
"192": 35,
"193": 36,
"194": 37,
"195": 38,
"196": 39,
"198": 40,
"199": 41,
"208": 42,
"210": 43,
"211": 44,
"212": 45,
"213": 46,
"214": 47,
"217": 48,
"218": 49,
"219": 50,
"220": 51,
"221": 52,
"222": 53,
"223": 54,
"232": 55,
"233": 56,
"234": 57,
"235": 58,
"240": 59,
"241": 60,
"242": 61,
"243": 62,
"244": 63,
"245": 64,
"246": 65,
"253": 66,
"255": 67,
"256": 68,
"258": 69,
"260": 70,
"262": 71,
"268": 72,
"270": 73,
"272": 74,
"283": 75,
"286": 76,
"313": 77,
"317": 78,
"320": 79,
"328": 80,
"340": 81,
"341": 82,
"344": 83,
"345": 84,
"350": 85,
"352": 86,
"356": 87,
"366": 88,
"376": 89,
"381": 90,
"8208": 91,
"8220": 92,
"8222": 93,
"42788": 94,
"42816": 95,
"42817": 96
}
],
[
{
"61185": 0,
"61186": 1,
"61187": 2,
"61188": 3,
"61189": 4,
"61191": 5,
"61192": 6,
"61193": 7,
"61194": 8,
"61195": 9,
"61197": 10,
"61198": 11,
"61199": 12,
"61200": 13,
"61201": 14,
"61203": 15,
"61204": 16,
"61205": 17,
"61206": 18,
"61207": 19
}
]
]

View File

@ -0,0 +1,126 @@
{
"rtlSUB": {
"00622": { "1": "0FE82" },
"00623": { "1": "0FE84" },
"00624": { "1": "0FE86" },
"00625": { "1": "0FE88" },
"00626": { "1": "0FE8A", "3": "0FE8C", "2": "0FE8B" },
"00627": { "1": "0FE8E" },
"00628": { "1": "0FE90", "3": "0FE92", "2": "0FE91" },
"00629": { "1": "0FE94" },
"0062A": { "1": "0FE96", "3": "0FE98", "2": "0FE97" },
"0062B": { "1": "0FE9A", "3": "0FE9C", "2": "0FE9B" },
"0062C": { "1": "0FE9E", "3": "0FEA0", "2": "0FE9F" },
"0062D": { "1": "0FEA2", "3": "0FEA4", "2": "0FEA3" },
"0062E": { "1": "0FEA6", "3": "0FEA8", "2": "0FEA7" },
"0062F": { "1": "0FEAA" },
"00630": { "1": "0FEAC" },
"00631": { "1": "0FEAE" },
"00632": { "1": "0FEB0" },
"00633": { "1": "0FEB2", "3": "0FEB4", "2": "0FEB3" },
"00634": { "1": "0FEB6", "3": "0FEB8", "2": "0FEB7" },
"00635": { "1": "0FEBA", "3": "0FEBC", "2": "0FEBB" },
"00636": { "1": "0FEBE", "3": "0FEC0", "2": "0FEBF" },
"00637": { "1": "0FEC2", "3": "0FEC4", "2": "0FEC3" },
"00638": { "1": "0FEC6", "3": "0FEC8", "2": "0FEC7" },
"00639": { "1": "0FECA", "3": "0FECC", "2": "0FECB" },
"0063A": { "1": "0FECE", "3": "0FED0", "2": "0FECF" },
"00641": { "1": "0FED2", "3": "0FED4", "2": "0FED3" },
"00642": { "1": "0FED6", "3": "0FED8", "2": "0FED7" },
"00643": { "1": "0FEDA", "3": "0FEDC", "2": "0FEDB" },
"00644": { "1": "0FEDE", "3": "0FEE0", "2": "0FEDF" },
"00645": { "1": "0FEE2", "3": "0FEE4", "2": "0FEE3" },
"00646": { "1": "0FEE6", "3": "0FEE8", "2": "0FEE7" },
"00647": { "1": "0FEEA", "3": "0FEEC", "2": "0FEEB" },
"00648": { "1": "0FEEE" },
"00649": { "1": "0FEF0", "3": "0FBE9", "2": "0FBE8" },
"0064A": { "1": "0FEF2", "3": "0FEF4", "2": "0FEF3" },
"0066E": { "1": "0E238", "3": "0E23A", "2": "0E239" },
"0066F": { "1": "0E23E", "3": "0E240", "2": "0E23F" },
"00679": { "1": "0FB67", "3": "0FB69", "2": "0FB68" },
"0067A": { "1": "0FB5F", "3": "0FB61", "2": "0FB60" },
"0067B": { "1": "0FB53", "3": "0FB55", "2": "0FB54" },
"0067C": { "1": "0E244", "3": "0E246", "2": "0E245" },
"0067D": { "1": "0E247", "3": "0E249", "2": "0E248" },
"0067E": { "1": "0FB57", "3": "0FB59", "2": "0FB58" },
"0067F": { "1": "0FB63", "3": "0FB65", "2": "0FB64" },
"00680": { "1": "0FB5B", "3": "0FB5D", "2": "0FB5C" },
"00681": { "1": "0E24A", "3": "0E24C", "2": "0E24B" },
"00682": { "1": "0E24D", "3": "0E24F", "2": "0E24E" },
"00683": { "1": "0FB77", "3": "0FB79", "2": "0FB78" },
"00684": { "1": "0FB73", "3": "0FB75", "2": "0FB74" },
"00685": { "1": "0E250", "3": "0E252", "2": "0E251" },
"00686": { "1": "0FB7B", "3": "0FB7D", "2": "0FB7C" },
"00687": { "1": "0FB7F", "3": "0FB81", "2": "0FB80" },
"00688": { "1": "0FB89" },
"00689": { "1": "0E2F5" },
"0068A": { "1": "0E2F6" },
"0068B": { "1": "0E2F7" },
"0068C": { "1": "0FB85" },
"0068D": { "1": "0FB83" },
"0068E": { "1": "0FB87" },
"0068F": { "1": "0E2F8" },
"00690": { "1": "0E2F9" },
"00691": { "1": "0FB8D" },
"00692": { "1": "0E279" },
"00693": { "1": "0E2FA" },
"00694": { "1": "0E2FB" },
"00695": { "1": "0E271" },
"00696": { "1": "0E2FC" },
"00697": { "1": "0E2FD" },
"00698": { "1": "0FB8B" },
"00699": { "1": "0E2FE" },
"0069A": { "1": "0E2FF", "3": "0E301", "2": "0E300" },
"0069B": { "1": "0E302", "3": "0E304", "2": "0E303" },
"0069C": { "1": "0E305", "3": "0E307", "2": "0E306" },
"0069D": { "1": "0E308", "3": "0E30A", "2": "0E309" },
"0069E": { "1": "0E30B", "3": "0E30D", "2": "0E30C" },
"0069F": { "1": "0E30E", "3": "0E310", "2": "0E30F" },
"006A0": { "1": "0E311", "3": "0E313", "2": "0E312" },
"006A1": { "1": "0E23B", "3": "0E23D", "2": "0E23C" },
"006A2": { "1": "0E314", "3": "0E316", "2": "0E315" },
"006A3": { "1": "0E317", "3": "0E319", "2": "0E318" },
"006A4": { "1": "0FB6B", "3": "0FB6D", "2": "0FB6C" },
"006A5": { "1": "0E31A", "3": "0E31C", "2": "0E31B" },
"006A6": { "1": "0FB6F", "3": "0FB71", "2": "0FB70" },
"006A7": { "1": "0E31D", "3": "0E31F", "2": "0E31E" },
"006A8": { "1": "0E320", "3": "0E322", "2": "0E321" },
"006A9": { "1": "0FB8F", "3": "0FB91", "2": "0FB90" },
"006AA": { "1": "0E323", "3": "0E325", "2": "0E324" },
"006AB": { "1": "0E326", "3": "0E328", "2": "0E327" },
"006AC": { "1": "0E329", "3": "0E32B", "2": "0E32A" },
"006AD": { "1": "0FBD4", "3": "0FBD6", "2": "0FBD5" },
"006AE": { "1": "0E32C", "3": "0E32E", "2": "0E32D" },
"006AF": { "1": "0FB93", "3": "0FB95", "2": "0FB94" },
"006B0": { "1": "0E32F", "3": "0E331", "2": "0E330" },
"006B1": { "1": "0FB9B", "3": "0FB9D", "2": "0FB9C" },
"006B2": { "1": "0E332", "3": "0E334", "2": "0E333" },
"006B3": { "1": "0FB97", "3": "0FB99", "2": "0FB98" },
"006B4": { "1": "0E335", "3": "0E337", "2": "0E336" },
"006B5": { "1": "0E273", "3": "0E275", "2": "0E274" },
"006B6": { "1": "0E338", "3": "0E33A", "2": "0E339" },
"006B7": { "1": "0E33B", "3": "0E33D", "2": "0E33C" },
"006B8": { "1": "0E33E", "3": "0E340", "2": "0E33F" },
"006B9": { "1": "0E341", "3": "0E343", "2": "0E342" },
"006BA": { "1": "0FB9F", "3": "0E242", "2": "0E241" },
"006BB": { "1": "0FBA1", "3": "0FBA3", "2": "0FBA2" },
"006BC": { "1": "0E344", "3": "0E346", "2": "0E345" },
"006BD": { "1": "0E347", "3": "0E349", "2": "0E348" },
"006BE": { "1": "0FBAB", "3": "0FBAD", "2": "0FBAC" },
"006BF": { "1": "0E253", "3": "0E255", "2": "0E254" },
"006C6": { "1": "0FBDA" },
"006C7": { "1": "0FBD8" },
"006C8": { "1": "0FBDC" },
"006CB": { "1": "0FBDF" },
"006CC": { "1": "0FBFD", "3": "0FBFF", "2": "0FBFE" },
"006CE": { "1": "0E276", "3": "0E278", "2": "0E277" },
"006D0": { "1": "0FBE5", "3": "0FBE7", "2": "0FBE6" },
"006D5": { "1": "0E27B" }
},
"finals": "0FE82 0FE84 0FE86 0FE88 0FE8A 0FE90 0FE96 0FE9A 0FE9E 0FEA6 0FEAC 0FEB0 0FEB2 0FEB6 0FEBA 0FEBE 0FEC6 0FECE 0FEE2 0FEE6 0FEEA 0E238 0E23E 0FB67 0FB5F 0FB53 0E244 0E247 0FB57 0FB63 0FB5B 0E24A 0E24D 0FB77 0FB73 0E250 0FB7B 0FB7F 0FB89 0E2F5 0E2F6 0E2F7 0FB85 0FB83 0FB87 0E2F8 0E2F9 0FB8D 0E279 0E2FA 0E2FB 0E271 0E2FC 0E2FD 0FB8B 0E2FE 0E2FF 0E302 0E305 0E308 0E30B 0E30E 0E311 0E23B 0E314 0E317 0FB6B 0E31A 0FB6F 0E31D 0E320 0FB8F 0E323 0E326 0E329 0FBD4 0E32C 0E32F 0FB9B 0E332 0FB97 0E335 0E273 0E338 0E33B 0E33E 0E341 0FB9F 0FBA1 0E344 0E347 0FBAB 0E253 0FBDA 0FBD8 0FBDC 0FBDF 0FBFD 0E276 0FBE5 0E27B ",
"rphf": [],
"half": [],
"pref": [],
"blwf": [],
"pstf": []
}

View File

@ -0,0 +1,126 @@
{
"rtlSUB": {
"00622": { "1": "0FE82" },
"00623": { "1": "0FE84" },
"00624": { "1": "0FE86" },
"00625": { "1": "0FE88" },
"00626": { "1": "0FE8A", "3": "0FE8C", "2": "0FE8B" },
"00627": { "1": "0FE8E" },
"00628": { "1": "0FE90", "3": "0FE92", "2": "0FE91" },
"00629": { "1": "0FE94" },
"0062A": { "1": "0FE96", "3": "0FE98", "2": "0FE97" },
"0062B": { "1": "0FE9A", "3": "0FE9C", "2": "0FE9B" },
"0062C": { "1": "0FE9E", "3": "0FEA0", "2": "0FE9F" },
"0062D": { "1": "0FEA2", "3": "0FEA4", "2": "0FEA3" },
"0062E": { "1": "0FEA6", "3": "0FEA8", "2": "0FEA7" },
"0062F": { "1": "0FEAA" },
"00630": { "1": "0FEAC" },
"00631": { "1": "0FEAE" },
"00632": { "1": "0FEB0" },
"00633": { "1": "0FEB2", "3": "0FEB4", "2": "0FEB3" },
"00634": { "1": "0FEB6", "3": "0FEB8", "2": "0FEB7" },
"00635": { "1": "0FEBA", "3": "0FEBC", "2": "0FEBB" },
"00636": { "1": "0FEBE", "3": "0FEC0", "2": "0FEBF" },
"00637": { "1": "0FEC2", "3": "0FEC4", "2": "0FEC3" },
"00638": { "1": "0FEC6", "3": "0FEC8", "2": "0FEC7" },
"00639": { "1": "0FECA", "3": "0FECC", "2": "0FECB" },
"0063A": { "1": "0FECE", "3": "0FED0", "2": "0FECF" },
"00641": { "1": "0FED2", "3": "0FED4", "2": "0FED3" },
"00642": { "1": "0FED6", "3": "0FED8", "2": "0FED7" },
"00643": { "1": "0FEDA", "3": "0FEDC", "2": "0FEDB" },
"00644": { "1": "0FEDE", "3": "0FEE0", "2": "0FEDF" },
"00645": { "1": "0FEE2", "3": "0FEE4", "2": "0FEE3" },
"00646": { "1": "0FEE6", "3": "0FEE8", "2": "0FEE7" },
"00647": { "1": "0FEEA", "3": "0FEEC", "2": "0FEEB" },
"00648": { "1": "0FEEE" },
"00649": { "1": "0FEF0", "3": "0FBE9", "2": "0FBE8" },
"0064A": { "1": "0FEF2", "3": "0FEF4", "2": "0FEF3" },
"0066E": { "1": "0E238", "3": "0E23A", "2": "0E239" },
"0066F": { "1": "0E23E", "3": "0E240", "2": "0E23F" },
"00679": { "1": "0FB67", "3": "0FB69", "2": "0FB68" },
"0067A": { "1": "0FB5F", "3": "0FB61", "2": "0FB60" },
"0067B": { "1": "0FB53", "3": "0FB55", "2": "0FB54" },
"0067C": { "1": "0E244", "3": "0E246", "2": "0E245" },
"0067D": { "1": "0E247", "3": "0E249", "2": "0E248" },
"0067E": { "1": "0FB57", "3": "0FB59", "2": "0FB58" },
"0067F": { "1": "0FB63", "3": "0FB65", "2": "0FB64" },
"00680": { "1": "0FB5B", "3": "0FB5D", "2": "0FB5C" },
"00681": { "1": "0E24A", "3": "0E24C", "2": "0E24B" },
"00682": { "1": "0E24D", "3": "0E24F", "2": "0E24E" },
"00683": { "1": "0FB77", "3": "0FB79", "2": "0FB78" },
"00684": { "1": "0FB73", "3": "0FB75", "2": "0FB74" },
"00685": { "1": "0E250", "3": "0E252", "2": "0E251" },
"00686": { "1": "0FB7B", "3": "0FB7D", "2": "0FB7C" },
"00687": { "1": "0FB7F", "3": "0FB81", "2": "0FB80" },
"00688": { "1": "0FB89" },
"00689": { "1": "0E2F5" },
"0068A": { "1": "0E2F6" },
"0068B": { "1": "0E2F7" },
"0068C": { "1": "0FB85" },
"0068D": { "1": "0FB83" },
"0068E": { "1": "0FB87" },
"0068F": { "1": "0E2F8" },
"00690": { "1": "0E2F9" },
"00691": { "1": "0FB8D" },
"00692": { "1": "0E279" },
"00693": { "1": "0E2FA" },
"00694": { "1": "0E2FB" },
"00695": { "1": "0E271" },
"00696": { "1": "0E2FC" },
"00697": { "1": "0E2FD" },
"00698": { "1": "0FB8B" },
"00699": { "1": "0E2FE" },
"0069A": { "1": "0E2FF", "3": "0E301", "2": "0E300" },
"0069B": { "1": "0E302", "3": "0E304", "2": "0E303" },
"0069C": { "1": "0E305", "3": "0E307", "2": "0E306" },
"0069D": { "1": "0E308", "3": "0E30A", "2": "0E309" },
"0069E": { "1": "0E30B", "3": "0E30D", "2": "0E30C" },
"0069F": { "1": "0E30E", "3": "0E310", "2": "0E30F" },
"006A0": { "1": "0E311", "3": "0E313", "2": "0E312" },
"006A1": { "1": "0E23B", "3": "0E23D", "2": "0E23C" },
"006A2": { "1": "0E314", "3": "0E316", "2": "0E315" },
"006A3": { "1": "0E317", "3": "0E319", "2": "0E318" },
"006A4": { "1": "0FB6B", "3": "0FB6D", "2": "0FB6C" },
"006A5": { "1": "0E31A", "3": "0E31C", "2": "0E31B" },
"006A6": { "1": "0FB6F", "3": "0FB71", "2": "0FB70" },
"006A7": { "1": "0E31D", "3": "0E31F", "2": "0E31E" },
"006A8": { "1": "0E320", "3": "0E322", "2": "0E321" },
"006A9": { "1": "0FB8F", "3": "0FB91", "2": "0FB90" },
"006AA": { "1": "0E323", "3": "0E325", "2": "0E324" },
"006AB": { "1": "0E326", "3": "0E328", "2": "0E327" },
"006AC": { "1": "0E329", "3": "0E32B", "2": "0E32A" },
"006AD": { "1": "0FBD4", "3": "0FBD6", "2": "0FBD5" },
"006AE": { "1": "0E32C", "3": "0E32E", "2": "0E32D" },
"006AF": { "1": "0FB93", "3": "0FB95", "2": "0FB94" },
"006B0": { "1": "0E32F", "3": "0E331", "2": "0E330" },
"006B1": { "1": "0FB9B", "3": "0FB9D", "2": "0FB9C" },
"006B2": { "1": "0E332", "3": "0E334", "2": "0E333" },
"006B3": { "1": "0FB97", "3": "0FB99", "2": "0FB98" },
"006B4": { "1": "0E335", "3": "0E337", "2": "0E336" },
"006B5": { "1": "0E273", "3": "0E275", "2": "0E274" },
"006B6": { "1": "0E338", "3": "0E33A", "2": "0E339" },
"006B7": { "1": "0E33B", "3": "0E33D", "2": "0E33C" },
"006B8": { "1": "0E33E", "3": "0E340", "2": "0E33F" },
"006B9": { "1": "0E341", "3": "0E343", "2": "0E342" },
"006BA": { "1": "0FB9F", "3": "0E242", "2": "0E241" },
"006BB": { "1": "0FBA1", "3": "0FBA3", "2": "0FBA2" },
"006BC": { "1": "0E344", "3": "0E346", "2": "0E345" },
"006BD": { "1": "0E347", "3": "0E349", "2": "0E348" },
"006BE": { "1": "0FBAB", "3": "0FBAD", "2": "0FBAC" },
"006BF": { "1": "0E253", "3": "0E255", "2": "0E254" },
"006C6": { "1": "0FBDA" },
"006C7": { "1": "0FBD8" },
"006C8": { "1": "0FBDC" },
"006CB": { "1": "0FBDF" },
"006CC": { "1": "0FBFD", "3": "0FBFF", "2": "0FBFE" },
"006CE": { "1": "0E276", "3": "0E278", "2": "0E277" },
"006D0": { "1": "0FBE5", "3": "0FBE7", "2": "0FBE6" },
"006D5": { "1": "0E27B" }
},
"finals": "0FE82 0FE84 0FE86 0FE88 0FE8A 0FE90 0FE96 0FE9A 0FE9E 0FEA6 0FEAC 0FEB0 0FEB2 0FEB6 0FEBA 0FEBE 0FEC6 0FECE 0FEE2 0FEE6 0FEEA 0E238 0E23E 0FB67 0FB5F 0FB53 0E244 0E247 0FB57 0FB63 0FB5B 0E24A 0E24D 0FB77 0FB73 0E250 0FB7B 0FB7F 0FB89 0E2F5 0E2F6 0E2F7 0FB85 0FB83 0FB87 0E2F8 0E2F9 0FB8D 0E279 0E2FA 0E2FB 0E271 0E2FC 0E2FD 0FB8B 0E2FE 0E2FF 0E302 0E305 0E308 0E30B 0E30E 0E311 0E23B 0E314 0E317 0FB6B 0E31A 0FB6F 0E31D 0E320 0FB8F 0E323 0E326 0E329 0FBD4 0E32C 0E32F 0FB9B 0E332 0FB97 0E335 0E273 0E338 0E33B 0E33E 0E341 0FB9F 0FBA1 0E344 0E347 0FBAB 0E253 0FBDA 0FBD8 0FBDC 0FBDF 0FBFD 0E276 0FBE5 0E27B ",
"rphf": [],
"half": [],
"pref": [],
"blwf": [],
"pstf": []
}

View File

@ -0,0 +1,126 @@
{
"rtlSUB": {
"00622": { "1": "0FE82" },
"00623": { "1": "0FE84" },
"00624": { "1": "0FE86" },
"00625": { "1": "0FE88" },
"00626": { "1": "0FE8A", "3": "0FE8C", "2": "0FE8B" },
"00627": { "1": "0FE8E" },
"00628": { "1": "0FE90", "3": "0FE92", "2": "0FE91" },
"00629": { "1": "0FE94" },
"0062A": { "1": "0FE96", "3": "0FE98", "2": "0FE97" },
"0062B": { "1": "0FE9A", "3": "0FE9C", "2": "0FE9B" },
"0062C": { "1": "0FE9E", "3": "0FEA0", "2": "0FE9F" },
"0062D": { "1": "0FEA2", "3": "0FEA4", "2": "0FEA3" },
"0062E": { "1": "0FEA6", "3": "0FEA8", "2": "0FEA7" },
"0062F": { "1": "0FEAA" },
"00630": { "1": "0FEAC" },
"00631": { "1": "0FEAE" },
"00632": { "1": "0FEB0" },
"00633": { "1": "0FEB2", "3": "0FEB4", "2": "0FEB3" },
"00634": { "1": "0FEB6", "3": "0FEB8", "2": "0FEB7" },
"00635": { "1": "0FEBA", "3": "0FEBC", "2": "0FEBB" },
"00636": { "1": "0FEBE", "3": "0FEC0", "2": "0FEBF" },
"00637": { "1": "0FEC2", "3": "0FEC4", "2": "0FEC3" },
"00638": { "1": "0FEC6", "3": "0FEC8", "2": "0FEC7" },
"00639": { "1": "0FECA", "3": "0FECC", "2": "0FECB" },
"0063A": { "1": "0FECE", "3": "0FED0", "2": "0FECF" },
"00641": { "1": "0FED2", "3": "0FED4", "2": "0FED3" },
"00642": { "1": "0FED6", "3": "0FED8", "2": "0FED7" },
"00643": { "1": "0FEDA", "3": "0FEDC", "2": "0FEDB" },
"00644": { "1": "0FEDE", "3": "0FEE0", "2": "0FEDF" },
"00645": { "1": "0FEE2", "3": "0FEE4", "2": "0FEE3" },
"00646": { "1": "0FEE6", "3": "0FEE8", "2": "0FEE7" },
"00647": { "1": "0FEEA", "3": "0FEEC", "2": "0FEEB" },
"00648": { "1": "0FEEE" },
"00649": { "1": "0FEF0", "3": "0FBE9", "2": "0FBE8" },
"0064A": { "1": "0FEF2", "3": "0FEF4", "2": "0FEF3" },
"0066E": { "1": "0E238", "3": "0E23A", "2": "0E239" },
"0066F": { "1": "0E23E", "3": "0E240", "2": "0E23F" },
"00679": { "1": "0FB67", "3": "0FB69", "2": "0FB68" },
"0067A": { "1": "0FB5F", "3": "0FB61", "2": "0FB60" },
"0067B": { "1": "0FB53", "3": "0FB55", "2": "0FB54" },
"0067C": { "1": "0E244", "3": "0E246", "2": "0E245" },
"0067D": { "1": "0E247", "3": "0E249", "2": "0E248" },
"0067E": { "1": "0FB57", "3": "0FB59", "2": "0FB58" },
"0067F": { "1": "0FB63", "3": "0FB65", "2": "0FB64" },
"00680": { "1": "0FB5B", "3": "0FB5D", "2": "0FB5C" },
"00681": { "1": "0E24A", "3": "0E24C", "2": "0E24B" },
"00682": { "1": "0E24D", "3": "0E24F", "2": "0E24E" },
"00683": { "1": "0FB77", "3": "0FB79", "2": "0FB78" },
"00684": { "1": "0FB73", "3": "0FB75", "2": "0FB74" },
"00685": { "1": "0E250", "3": "0E252", "2": "0E251" },
"00686": { "1": "0FB7B", "3": "0FB7D", "2": "0FB7C" },
"00687": { "1": "0FB7F", "3": "0FB81", "2": "0FB80" },
"00688": { "1": "0FB89" },
"00689": { "1": "0E2F5" },
"0068A": { "1": "0E2F6" },
"0068B": { "1": "0E2F7" },
"0068C": { "1": "0FB85" },
"0068D": { "1": "0FB83" },
"0068E": { "1": "0FB87" },
"0068F": { "1": "0E2F8" },
"00690": { "1": "0E2F9" },
"00691": { "1": "0FB8D" },
"00692": { "1": "0E279" },
"00693": { "1": "0E2FA" },
"00694": { "1": "0E2FB" },
"00695": { "1": "0E271" },
"00696": { "1": "0E2FC" },
"00697": { "1": "0E2FD" },
"00698": { "1": "0FB8B" },
"00699": { "1": "0E2FE" },
"0069A": { "1": "0E2FF", "3": "0E301", "2": "0E300" },
"0069B": { "1": "0E302", "3": "0E304", "2": "0E303" },
"0069C": { "1": "0E305", "3": "0E307", "2": "0E306" },
"0069D": { "1": "0E308", "3": "0E30A", "2": "0E309" },
"0069E": { "1": "0E30B", "3": "0E30D", "2": "0E30C" },
"0069F": { "1": "0E30E", "3": "0E310", "2": "0E30F" },
"006A0": { "1": "0E311", "3": "0E313", "2": "0E312" },
"006A1": { "1": "0E23B", "3": "0E23D", "2": "0E23C" },
"006A2": { "1": "0E314", "3": "0E316", "2": "0E315" },
"006A3": { "1": "0E317", "3": "0E319", "2": "0E318" },
"006A4": { "1": "0FB6B", "3": "0FB6D", "2": "0FB6C" },
"006A5": { "1": "0E31A", "3": "0E31C", "2": "0E31B" },
"006A6": { "1": "0FB6F", "3": "0FB71", "2": "0FB70" },
"006A7": { "1": "0E31D", "3": "0E31F", "2": "0E31E" },
"006A8": { "1": "0E320", "3": "0E322", "2": "0E321" },
"006A9": { "1": "0FB8F", "3": "0FB91", "2": "0FB90" },
"006AA": { "1": "0E323", "3": "0E325", "2": "0E324" },
"006AB": { "1": "0E326", "3": "0E328", "2": "0E327" },
"006AC": { "1": "0E329", "3": "0E32B", "2": "0E32A" },
"006AD": { "1": "0FBD4", "3": "0FBD6", "2": "0FBD5" },
"006AE": { "1": "0E32C", "3": "0E32E", "2": "0E32D" },
"006AF": { "1": "0FB93", "3": "0FB95", "2": "0FB94" },
"006B0": { "1": "0E32F", "3": "0E331", "2": "0E330" },
"006B1": { "1": "0FB9B", "3": "0FB9D", "2": "0FB9C" },
"006B2": { "1": "0E332", "3": "0E334", "2": "0E333" },
"006B3": { "1": "0FB97", "3": "0FB99", "2": "0FB98" },
"006B4": { "1": "0E335", "3": "0E337", "2": "0E336" },
"006B5": { "1": "0E273", "3": "0E275", "2": "0E274" },
"006B6": { "1": "0E338", "3": "0E33A", "2": "0E339" },
"006B7": { "1": "0E33B", "3": "0E33D", "2": "0E33C" },
"006B8": { "1": "0E33E", "3": "0E340", "2": "0E33F" },
"006B9": { "1": "0E341", "3": "0E343", "2": "0E342" },
"006BA": { "1": "0FB9F", "3": "0E242", "2": "0E241" },
"006BB": { "1": "0FBA1", "3": "0FBA3", "2": "0FBA2" },
"006BC": { "1": "0E344", "3": "0E346", "2": "0E345" },
"006BD": { "1": "0E347", "3": "0E349", "2": "0E348" },
"006BE": { "1": "0FBAB", "3": "0FBAD", "2": "0FBAC" },
"006BF": { "1": "0E253", "3": "0E255", "2": "0E254" },
"006C6": { "1": "0FBDA" },
"006C7": { "1": "0FBD8" },
"006C8": { "1": "0FBDC" },
"006CB": { "1": "0FBDF" },
"006CC": { "1": "0FBFD", "3": "0FBFF", "2": "0FBFE" },
"006CE": { "1": "0E276", "3": "0E278", "2": "0E277" },
"006D0": { "1": "0FBE5", "3": "0FBE7", "2": "0FBE6" },
"006D5": { "1": "0E27B" }
},
"finals": "0FE82 0FE84 0FE86 0FE88 0FE8A 0FE90 0FE96 0FE9A 0FE9E 0FEA6 0FEAC 0FEB0 0FEB2 0FEB6 0FEBA 0FEBE 0FEC6 0FECE 0FEE2 0FEE6 0FEEA 0E238 0E23E 0FB67 0FB5F 0FB53 0E244 0E247 0FB57 0FB63 0FB5B 0E24A 0E24D 0FB77 0FB73 0E250 0FB7B 0FB7F 0FB89 0E2F5 0E2F6 0E2F7 0FB85 0FB83 0FB87 0E2F8 0E2F9 0FB8D 0E279 0E2FA 0E2FB 0E271 0E2FC 0E2FD 0FB8B 0E2FE 0E2FF 0E302 0E305 0E308 0E30B 0E30E 0E311 0E23B 0E314 0E317 0FB6B 0E31A 0FB6F 0E31D 0E320 0FB8F 0E323 0E326 0E329 0FBD4 0E32C 0E32F 0FB9B 0E332 0FB97 0E335 0E273 0E338 0E33B 0E33E 0E341 0FB9F 0FBA1 0E344 0E347 0FBAB 0E253 0FBDA 0FBD8 0FBDC 0FBDF 0FBFD 0E276 0FBE5 0E27B ",
"rphf": [],
"half": [],
"pref": [],
"blwf": [],
"pstf": []
}

View File

@ -0,0 +1,126 @@
{
"rtlSUB": {
"00622": { "1": "0FE82" },
"00623": { "1": "0FE84" },
"00624": { "1": "0FE86" },
"00625": { "1": "0FE88" },
"00626": { "1": "0FE8A", "3": "0FE8C", "2": "0FE8B" },
"00627": { "1": "0FE8E" },
"00628": { "1": "0FE90", "3": "0FE92", "2": "0FE91" },
"00629": { "1": "0FE94" },
"0062A": { "1": "0FE96", "3": "0FE98", "2": "0FE97" },
"0062B": { "1": "0FE9A", "3": "0FE9C", "2": "0FE9B" },
"0062C": { "1": "0FE9E", "3": "0FEA0", "2": "0FE9F" },
"0062D": { "1": "0FEA2", "3": "0FEA4", "2": "0FEA3" },
"0062E": { "1": "0FEA6", "3": "0FEA8", "2": "0FEA7" },
"0062F": { "1": "0FEAA" },
"00630": { "1": "0FEAC" },
"00631": { "1": "0FEAE" },
"00632": { "1": "0FEB0" },
"00633": { "1": "0FEB2", "3": "0FEB4", "2": "0FEB3" },
"00634": { "1": "0FEB6", "3": "0FEB8", "2": "0FEB7" },
"00635": { "1": "0FEBA", "3": "0FEBC", "2": "0FEBB" },
"00636": { "1": "0FEBE", "3": "0FEC0", "2": "0FEBF" },
"00637": { "1": "0FEC2", "3": "0FEC4", "2": "0FEC3" },
"00638": { "1": "0FEC6", "3": "0FEC8", "2": "0FEC7" },
"00639": { "1": "0FECA", "3": "0FECC", "2": "0FECB" },
"0063A": { "1": "0FECE", "3": "0FED0", "2": "0FECF" },
"00641": { "1": "0FED2", "3": "0FED4", "2": "0FED3" },
"00642": { "1": "0FED6", "3": "0FED8", "2": "0FED7" },
"00643": { "1": "0FEDA", "3": "0FEDC", "2": "0FEDB" },
"00644": { "1": "0FEDE", "3": "0FEE0", "2": "0FEDF" },
"00645": { "1": "0FEE2", "3": "0FEE4", "2": "0FEE3" },
"00646": { "1": "0FEE6", "3": "0FEE8", "2": "0FEE7" },
"00647": { "1": "0FEEA", "3": "0FEEC", "2": "0FEEB" },
"00648": { "1": "0FEEE" },
"00649": { "1": "0FEF0", "3": "0FBE9", "2": "0FBE8" },
"0064A": { "1": "0FEF2", "3": "0FEF4", "2": "0FEF3" },
"0066E": { "1": "0E238", "3": "0E23A", "2": "0E239" },
"0066F": { "1": "0E23E", "3": "0E240", "2": "0E23F" },
"00679": { "1": "0FB67", "3": "0FB69", "2": "0FB68" },
"0067A": { "1": "0FB5F", "3": "0FB61", "2": "0FB60" },
"0067B": { "1": "0FB53", "3": "0FB55", "2": "0FB54" },
"0067C": { "1": "0E244", "3": "0E246", "2": "0E245" },
"0067D": { "1": "0E247", "3": "0E249", "2": "0E248" },
"0067E": { "1": "0FB57", "3": "0FB59", "2": "0FB58" },
"0067F": { "1": "0FB63", "3": "0FB65", "2": "0FB64" },
"00680": { "1": "0FB5B", "3": "0FB5D", "2": "0FB5C" },
"00681": { "1": "0E24A", "3": "0E24C", "2": "0E24B" },
"00682": { "1": "0E24D", "3": "0E24F", "2": "0E24E" },
"00683": { "1": "0FB77", "3": "0FB79", "2": "0FB78" },
"00684": { "1": "0FB73", "3": "0FB75", "2": "0FB74" },
"00685": { "1": "0E250", "3": "0E252", "2": "0E251" },
"00686": { "1": "0FB7B", "3": "0FB7D", "2": "0FB7C" },
"00687": { "1": "0FB7F", "3": "0FB81", "2": "0FB80" },
"00688": { "1": "0FB89" },
"00689": { "1": "0E2F5" },
"0068A": { "1": "0E2F6" },
"0068B": { "1": "0E2F7" },
"0068C": { "1": "0FB85" },
"0068D": { "1": "0FB83" },
"0068E": { "1": "0FB87" },
"0068F": { "1": "0E2F8" },
"00690": { "1": "0E2F9" },
"00691": { "1": "0FB8D" },
"00692": { "1": "0E279" },
"00693": { "1": "0E2FA" },
"00694": { "1": "0E2FB" },
"00695": { "1": "0E271" },
"00696": { "1": "0E2FC" },
"00697": { "1": "0E2FD" },
"00698": { "1": "0FB8B" },
"00699": { "1": "0E2FE" },
"0069A": { "1": "0E2FF", "3": "0E301", "2": "0E300" },
"0069B": { "1": "0E302", "3": "0E304", "2": "0E303" },
"0069C": { "1": "0E305", "3": "0E307", "2": "0E306" },
"0069D": { "1": "0E308", "3": "0E30A", "2": "0E309" },
"0069E": { "1": "0E30B", "3": "0E30D", "2": "0E30C" },
"0069F": { "1": "0E30E", "3": "0E310", "2": "0E30F" },
"006A0": { "1": "0E311", "3": "0E313", "2": "0E312" },
"006A1": { "1": "0E23B", "3": "0E23D", "2": "0E23C" },
"006A2": { "1": "0E314", "3": "0E316", "2": "0E315" },
"006A3": { "1": "0E317", "3": "0E319", "2": "0E318" },
"006A4": { "1": "0FB6B", "3": "0FB6D", "2": "0FB6C" },
"006A5": { "1": "0E31A", "3": "0E31C", "2": "0E31B" },
"006A6": { "1": "0FB6F", "3": "0FB71", "2": "0FB70" },
"006A7": { "1": "0E31D", "3": "0E31F", "2": "0E31E" },
"006A8": { "1": "0E320", "3": "0E322", "2": "0E321" },
"006A9": { "1": "0FB8F", "3": "0FB91", "2": "0FB90" },
"006AA": { "1": "0E323", "3": "0E325", "2": "0E324" },
"006AB": { "1": "0E326", "3": "0E328", "2": "0E327" },
"006AC": { "1": "0E329", "3": "0E32B", "2": "0E32A" },
"006AD": { "1": "0FBD4", "3": "0FBD6", "2": "0FBD5" },
"006AE": { "1": "0E32C", "3": "0E32E", "2": "0E32D" },
"006AF": { "1": "0FB93", "3": "0FB95", "2": "0FB94" },
"006B0": { "1": "0E32F", "3": "0E331", "2": "0E330" },
"006B1": { "1": "0FB9B", "3": "0FB9D", "2": "0FB9C" },
"006B2": { "1": "0E332", "3": "0E334", "2": "0E333" },
"006B3": { "1": "0FB97", "3": "0FB99", "2": "0FB98" },
"006B4": { "1": "0E335", "3": "0E337", "2": "0E336" },
"006B5": { "1": "0E273", "3": "0E275", "2": "0E274" },
"006B6": { "1": "0E338", "3": "0E33A", "2": "0E339" },
"006B7": { "1": "0E33B", "3": "0E33D", "2": "0E33C" },
"006B8": { "1": "0E33E", "3": "0E340", "2": "0E33F" },
"006B9": { "1": "0E341", "3": "0E343", "2": "0E342" },
"006BA": { "1": "0FB9F", "3": "0E242", "2": "0E241" },
"006BB": { "1": "0FBA1", "3": "0FBA3", "2": "0FBA2" },
"006BC": { "1": "0E344", "3": "0E346", "2": "0E345" },
"006BD": { "1": "0E347", "3": "0E349", "2": "0E348" },
"006BE": { "1": "0FBAB", "3": "0FBAD", "2": "0FBAC" },
"006BF": { "1": "0E253", "3": "0E255", "2": "0E254" },
"006C6": { "1": "0FBDA" },
"006C7": { "1": "0FBD8" },
"006C8": { "1": "0FBDC" },
"006CB": { "1": "0FBDF" },
"006CC": { "1": "0FBFD", "3": "0FBFF", "2": "0FBFE" },
"006CE": { "1": "0E276", "3": "0E278", "2": "0E277" },
"006D0": { "1": "0FBE5", "3": "0FBE7", "2": "0FBE6" },
"006D5": { "1": "0E27B" }
},
"finals": "0FE82 0FE84 0FE86 0FE88 0FE8A 0FE90 0FE96 0FE9A 0FE9E 0FEA6 0FEAC 0FEB0 0FEB2 0FEB6 0FEBA 0FEBE 0FEC6 0FECE 0FEE2 0FEE6 0FEEA 0E238 0E23E 0FB67 0FB5F 0FB53 0E244 0E247 0FB57 0FB63 0FB5B 0E24A 0E24D 0FB77 0FB73 0E250 0FB7B 0FB7F 0FB89 0E2F5 0E2F6 0E2F7 0FB85 0FB83 0FB87 0E2F8 0E2F9 0FB8D 0E279 0E2FA 0E2FB 0E271 0E2FC 0E2FD 0FB8B 0E2FE 0E2FF 0E302 0E305 0E308 0E30B 0E30E 0E311 0E23B 0E314 0E317 0FB6B 0E31A 0FB6F 0E31D 0E320 0FB8F 0E323 0E326 0E329 0FBD4 0E32C 0E32F 0FB9B 0E332 0FB97 0E335 0E273 0E338 0E33B 0E33E 0E341 0FB9F 0FBA1 0E344 0E347 0FBAB 0E253 0FBDA 0FBD8 0FBDC 0FBDF 0FBFD 0E276 0FBE5 0E27B ",
"rphf": [],
"half": [],
"pref": [],
"blwf": [],
"pstf": []
}

View File

@ -0,0 +1,40 @@
{
"rtlSUB": {
"007CA": { "1": "0E28E", "3": "0E28F", "2": "0E290" },
"007CB": { "1": "0E291", "3": "0E292", "2": "0E293" },
"007CC": { "1": "0E294", "3": "0E295", "2": "0E296" },
"007CD": { "1": "0E297", "3": "0E298", "2": "0E299" },
"007CE": { "1": "0E29A", "3": "0E29B", "2": "0E29C" },
"007CF": { "1": "0E29D", "3": "0E29E", "2": "0E29F" },
"007D0": { "1": "0E2A0", "3": "0E2A1", "2": "0E2A2" },
"007D1": { "1": "0E2A3", "3": "0E2A4", "2": "0E2A5" },
"007D2": { "1": "0E2A6", "3": "0E2A7", "2": "0E2A8" },
"007D3": { "1": "0E2A9", "3": "0E2AA", "2": "0E2AB" },
"007D4": { "1": "0E2AC", "3": "0E2AD", "2": "0E2AE" },
"007D5": { "1": "0E2AF", "3": "0E2B0", "2": "0E2B1" },
"007D6": { "1": "0E2B2", "3": "0E2B3", "2": "0E2B4" },
"007D7": { "1": "0E2B5", "3": "0E2B6", "2": "0E2B7" },
"007D8": { "1": "0E2B8", "3": "0E2B9", "2": "0E2BA" },
"007D9": { "1": "0E2BB", "3": "0E2BC", "2": "0E2BD" },
"007DA": { "1": "0E2BE", "3": "0E2BF", "2": "0E2C0" },
"007DB": { "1": "0E2C1", "3": "0E2C2", "2": "0E2C3" },
"007DC": { "1": "0E2C4", "3": "0E2C5", "2": "0E2C6" },
"007DD": { "1": "0E2C7", "3": "0E2C8", "2": "0E2C9" },
"007DE": { "1": "0E2CA", "3": "0E2CB", "2": "0E2CC" },
"007DF": { "1": "0E2CD", "3": "0E2CE", "2": "0E2CF" },
"007E0": { "1": "0E2D0", "3": "0E2D1", "2": "0E2D2" },
"007E1": { "1": "0E2D3", "3": "0E2D4", "2": "0E2D5" },
"007E2": { "1": "0E2D6", "3": "0E2D7", "2": "0E2D8" },
"007E3": { "1": "0E2D9", "3": "0E2DA", "2": "0E2DB" },
"007E4": { "1": "0E2DC", "3": "0E2DD", "2": "0E2DE" },
"007E5": { "1": "0E2DF", "3": "0E2E0", "2": "0E2E1" },
"007E6": { "1": "0E2E2", "3": "0E2E3", "2": "0E2E4" },
"007E7": { "1": "0E2E5", "3": "0E2E6", "2": "0E2E7" }
},
"finals": "0E28E 0E291 0E294 0E297 0E29A 0E29D 0E2A0 0E2A3 0E2A6 0E2A9 0E2AC 0E2AF 0E2B2 0E2B5 0E2B8 0E2BB 0E2BE 0E2C1 0E2C4 0E2C7 0E2CA 0E2CD 0E2D0 0E2D3 0E2D6 0E2D9 0E2DC 0E2DF 0E2E2 0E2E5 ",
"rphf": [],
"half": [],
"pref": [],
"blwf": [],
"pstf": []
}

View File

@ -0,0 +1,656 @@
[
[{ "161": 0, "191": 1, "11800": 2 }],
[
{
"1994": 0,
"1995": 1,
"1996": 2,
"1997": 3,
"1998": 4,
"1999": 5,
"2000": 6,
"2001": 7,
"2002": 8,
"2003": 9,
"2004": 10,
"2005": 11,
"2006": 12,
"2007": 13,
"2008": 14,
"2009": 15,
"2010": 16,
"2011": 17,
"2012": 18,
"2013": 19,
"2014": 20,
"2015": 21,
"2016": 22,
"2017": 23,
"2018": 24,
"2019": 25,
"2020": 26,
"2021": 27,
"2022": 28,
"2023": 29,
"2042": 30,
"8205": 31,
"57998": 32,
"57999": 33,
"58000": 34,
"58001": 35,
"58002": 36,
"58003": 37,
"58004": 38,
"58005": 39,
"58006": 40,
"58007": 41,
"58008": 42,
"58009": 43,
"58010": 44,
"58011": 45,
"58012": 46,
"58013": 47,
"58014": 48,
"58015": 49,
"58016": 50,
"58017": 51,
"58018": 52,
"58019": 53,
"58020": 54,
"58021": 55,
"58022": 56,
"58023": 57,
"58024": 58,
"58025": 59,
"58026": 60,
"58027": 61,
"58028": 62,
"58029": 63,
"58030": 64,
"58031": 65,
"58032": 66,
"58033": 67,
"58034": 68,
"58035": 69,
"58036": 70,
"58037": 71,
"58038": 72,
"58039": 73,
"58040": 74,
"58041": 75,
"58042": 76,
"58043": 77,
"58044": 78,
"58045": 79,
"58046": 80,
"58047": 81,
"58048": 82,
"58049": 83,
"58050": 84,
"58051": 85,
"58052": 86,
"58053": 87,
"58054": 88,
"58055": 89,
"58056": 90,
"58057": 91,
"58058": 92,
"58059": 93,
"58060": 94,
"58061": 95,
"58062": 96,
"58063": 97,
"58064": 98,
"58065": 99,
"58066": 100,
"58067": 101,
"58068": 102,
"58069": 103,
"58070": 104,
"58071": 105,
"58072": 106,
"58073": 107,
"58074": 108,
"58075": 109,
"58076": 110,
"58077": 111,
"58078": 112,
"58079": 113,
"58080": 114,
"58081": 115,
"58082": 116,
"58083": 117,
"58084": 118,
"58085": 119,
"58086": 120,
"58087": 121
}
],
[{ "1506": 0 }],
[
{
"105": 0,
"106": 1,
"303": 2,
"585": 3,
"616": 4,
"669": 5,
"768": 6,
"769": 7,
"770": 8,
"771": 9,
"772": 10,
"773": 11,
"774": 12,
"775": 13,
"776": 14,
"777": 15,
"778": 16,
"779": 17,
"780": 18,
"781": 19,
"782": 20,
"783": 21,
"784": 22,
"785": 23,
"786": 24,
"787": 25,
"788": 26,
"829": 27,
"830": 28,
"831": 29,
"832": 30,
"833": 31,
"834": 32,
"835": 33,
"836": 34,
"838": 35,
"842": 36,
"843": 37,
"844": 38,
"849": 39,
"850": 40,
"855": 41,
"1011": 42,
"1110": 43,
"1112": 44,
"1155": 45,
"1156": 46,
"1157": 47,
"1158": 48,
"7725": 49,
"7883": 50,
"8400": 51,
"8401": 52,
"8406": 53,
"8407": 54,
"8520": 55,
"8521": 56
}
],
[
{ "741": 0, "742": 1, "743": 2, "744": 3, "745": 4 },
{ "741": 0, "742": 1, "743": 2, "744": 3, "745": 4 },
{ "741": 0, "742": 1, "743": 2, "744": 3, "745": 4 },
{ "741": 0, "742": 1, "743": 2, "744": 3, "745": 4 },
{ "741": 0, "742": 1, "743": 2, "744": 3, "745": 4 },
{ "741": 0 },
{ "742": 0 },
{ "743": 0 },
{ "744": 0 },
{ "745": 0 }
],
[{ "1497": 0, "1522": 1 }],
[{ "1073": 0 }],
[{ "330": 0 }],
[
{
"1994": 0,
"1995": 1,
"1996": 2,
"1997": 3,
"1998": 4,
"1999": 5,
"2000": 6,
"2001": 7,
"2002": 8,
"2003": 9,
"2004": 10,
"2005": 11,
"2006": 12,
"2007": 13,
"2008": 14,
"2009": 15,
"2010": 16,
"2011": 17,
"2012": 18,
"2013": 19,
"2014": 20,
"2015": 21,
"2016": 22,
"2017": 23,
"2018": 24,
"2019": 25,
"2020": 26,
"2021": 27,
"2022": 28,
"2023": 29
}
],
[
{
"1570": 0,
"1571": 1,
"1572": 2,
"1573": 3,
"1574": 4,
"1575": 5,
"1576": 6,
"1577": 7,
"1578": 8,
"1579": 9,
"1580": 10,
"1581": 11,
"1582": 12,
"1583": 13,
"1584": 14,
"1585": 15,
"1586": 16,
"1587": 17,
"1588": 18,
"1589": 19,
"1590": 20,
"1591": 21,
"1592": 22,
"1593": 23,
"1594": 24,
"1601": 25,
"1602": 26,
"1603": 27,
"1604": 28,
"1605": 29,
"1606": 30,
"1607": 31,
"1608": 32,
"1609": 33,
"1610": 34,
"1646": 35,
"1647": 36,
"1657": 37,
"1658": 38,
"1659": 39,
"1660": 40,
"1661": 41,
"1662": 42,
"1663": 43,
"1664": 44,
"1665": 45,
"1666": 46,
"1667": 47,
"1668": 48,
"1669": 49,
"1670": 50,
"1671": 51,
"1672": 52,
"1673": 53,
"1674": 54,
"1675": 55,
"1676": 56,
"1677": 57,
"1678": 58,
"1679": 59,
"1680": 60,
"1681": 61,
"1682": 62,
"1683": 63,
"1684": 64,
"1685": 65,
"1686": 66,
"1687": 67,
"1688": 68,
"1689": 69,
"1690": 70,
"1691": 71,
"1692": 72,
"1693": 73,
"1694": 74,
"1695": 75,
"1696": 76,
"1697": 77,
"1698": 78,
"1699": 79,
"1700": 80,
"1701": 81,
"1702": 82,
"1703": 83,
"1704": 84,
"1705": 85,
"1706": 86,
"1707": 87,
"1708": 88,
"1709": 89,
"1710": 90,
"1711": 91,
"1712": 92,
"1713": 93,
"1714": 94,
"1715": 95,
"1716": 96,
"1717": 97,
"1718": 98,
"1719": 99,
"1720": 100,
"1721": 101,
"1722": 102,
"1723": 103,
"1724": 104,
"1725": 105,
"1726": 106,
"1727": 107,
"1734": 108,
"1735": 109,
"1736": 110,
"1739": 111,
"1740": 112,
"1742": 113,
"1744": 114,
"1749": 115
}
],
[
{
"1994": 0,
"1995": 1,
"1996": 2,
"1997": 3,
"1998": 4,
"1999": 5,
"2000": 6,
"2001": 7,
"2002": 8,
"2003": 9,
"2004": 10,
"2005": 11,
"2006": 12,
"2007": 13,
"2008": 14,
"2009": 15,
"2010": 16,
"2011": 17,
"2012": 18,
"2013": 19,
"2014": 20,
"2015": 21,
"2016": 22,
"2017": 23,
"2018": 24,
"2019": 25,
"2020": 26,
"2021": 27,
"2022": 28,
"2023": 29
}
],
[
{
"1574": 0,
"1576": 1,
"1578": 2,
"1579": 3,
"1580": 4,
"1581": 5,
"1582": 6,
"1587": 7,
"1588": 8,
"1589": 9,
"1590": 10,
"1591": 11,
"1592": 12,
"1593": 13,
"1594": 14,
"1601": 15,
"1602": 16,
"1603": 17,
"1604": 18,
"1605": 19,
"1606": 20,
"1607": 21,
"1609": 22,
"1610": 23,
"1646": 24,
"1647": 25,
"1657": 26,
"1658": 27,
"1659": 28,
"1660": 29,
"1661": 30,
"1662": 31,
"1663": 32,
"1664": 33,
"1665": 34,
"1666": 35,
"1667": 36,
"1668": 37,
"1669": 38,
"1670": 39,
"1671": 40,
"1690": 41,
"1691": 42,
"1692": 43,
"1693": 44,
"1694": 45,
"1695": 46,
"1696": 47,
"1697": 48,
"1698": 49,
"1699": 50,
"1700": 51,
"1701": 52,
"1702": 53,
"1703": 54,
"1704": 55,
"1705": 56,
"1706": 57,
"1707": 58,
"1708": 59,
"1709": 60,
"1710": 61,
"1711": 62,
"1712": 63,
"1713": 64,
"1714": 65,
"1715": 66,
"1716": 67,
"1717": 68,
"1718": 69,
"1719": 70,
"1720": 71,
"1721": 72,
"1722": 73,
"1723": 74,
"1724": 75,
"1725": 76,
"1726": 77,
"1727": 78,
"1740": 79,
"1742": 80,
"1744": 81
}
],
[
{
"1994": 0,
"1995": 1,
"1996": 2,
"1997": 3,
"1998": 4,
"1999": 5,
"2000": 6,
"2001": 7,
"2002": 8,
"2003": 9,
"2004": 10,
"2005": 11,
"2006": 12,
"2007": 13,
"2008": 14,
"2009": 15,
"2010": 16,
"2011": 17,
"2012": 18,
"2013": 19,
"2014": 20,
"2015": 21,
"2016": 22,
"2017": 23,
"2018": 24,
"2019": 25,
"2020": 26,
"2021": 27,
"2022": 28,
"2023": 29
}
],
[
{
"1574": 0,
"1576": 1,
"1578": 2,
"1579": 3,
"1580": 4,
"1581": 5,
"1582": 6,
"1587": 7,
"1588": 8,
"1589": 9,
"1590": 10,
"1591": 11,
"1592": 12,
"1593": 13,
"1594": 14,
"1601": 15,
"1602": 16,
"1603": 17,
"1604": 18,
"1605": 19,
"1606": 20,
"1607": 21,
"1609": 22,
"1610": 23,
"1646": 24,
"1647": 25,
"1657": 26,
"1658": 27,
"1659": 28,
"1660": 29,
"1661": 30,
"1662": 31,
"1663": 32,
"1664": 33,
"1665": 34,
"1666": 35,
"1667": 36,
"1668": 37,
"1669": 38,
"1670": 39,
"1671": 40,
"1690": 41,
"1691": 42,
"1692": 43,
"1693": 44,
"1694": 45,
"1695": 46,
"1696": 47,
"1697": 48,
"1698": 49,
"1699": 50,
"1700": 51,
"1701": 52,
"1702": 53,
"1703": 54,
"1704": 55,
"1705": 56,
"1706": 57,
"1707": 58,
"1708": 59,
"1709": 60,
"1710": 61,
"1711": 62,
"1712": 63,
"1713": 64,
"1714": 65,
"1715": 66,
"1716": 67,
"1717": 68,
"1718": 69,
"1719": 70,
"1720": 71,
"1721": 72,
"1722": 73,
"1723": 74,
"1724": 75,
"1725": 76,
"1726": 77,
"1727": 78,
"1740": 79,
"1742": 80,
"1744": 81
}
],
[{ "1613": 0, "1616": 1, "1617": 2 }],
[{ "1611": 0, "1612": 1, "1614": 2, "1615": 3, "1617": 4, "1620": 5 }],
[{ "65247": 0, "65248": 1 }],
[{ "65247": 0, "65248": 1 }],
[{ "102": 0 }],
[{ "32": 0, "1575": 1, "1600": 2, "1608": 3, "1610": 4 }],
[{ "1488": 0 }],
[{ "1381": 0, "1396": 1, "1406": 2 }],
[{ "115": 0 }],
[{ "383": 0 }],
[{ "33": 0, "63": 1, "70": 2, "82": 3, "83": 4, "84": 5, "97": 6, "99": 7 }],
[{ "1471": 0 }],
[{ "1471": 0 }],
[{ "910": 0, "933": 1, "939": 2, "946": 3, "952": 4, "960": 5, "966": 6 }],
[{ "910": 0, "933": 1, "939": 2, "946": 3, "952": 4, "960": 5, "966": 6 }],
[{ "73": 0, "74": 1, "97": 2, "108": 3, "330": 4 }],
[{ "73": 0, "74": 1, "97": 2, "108": 3, "121": 4, "330": 5 }],
[{ "1506": 0 }],
[
{
"768": 0,
"769": 1,
"770": 2,
"771": 3,
"774": 4,
"775": 5,
"776": 6,
"779": 7,
"780": 8,
"783": 9,
"785": 10
}
],
[
{
"105": 0,
"106": 1,
"303": 2,
"585": 3,
"616": 4,
"669": 5,
"1011": 6,
"1110": 7,
"1112": 8,
"7725": 9,
"7883": 10,
"8520": 11,
"8521": 12
}
],
[{ "741": 0, "742": 1, "743": 2, "744": 3, "745": 4 }],
[{ "741": 0, "742": 1, "743": 2, "744": 3, "745": 4 }],
[{ "741": 0, "742": 1, "743": 2, "744": 3, "745": 4 }],
[{ "741": 0, "742": 1, "743": 2, "744": 3, "745": 4 }],
[{ "741": 0, "742": 1, "743": 2, "744": 3, "745": 4 }],
[{ "741": 0, "742": 1, "743": 2, "744": 3, "745": 4 }]
]

File diff suppressed because it is too large Load Diff

View File

@ -116,7 +116,7 @@ function extension_api_checker()
''
);
$table = null;
$table = new stdClass();
$table->data = [];
$row = [];
@ -144,7 +144,7 @@ function extension_api_checker()
$row[] = html_print_input_password('password', $password, '', 50, 255, true);
$table->data[] = $row;
$table2 = null;
$table2 = new stdClass();
$table2->data = [];
$row = [];
@ -182,7 +182,7 @@ function extension_api_checker()
$row[] = html_print_input_text('other_mode', $other_mode, '', 50, 255, true);
$table2->data[] = $row;
$table3 = null;
$table3 = new stdClass();
$table3->data = [];
$row = [];

View File

@ -74,7 +74,7 @@ function extension_uploader_extensions()
);
}
$table = null;
$table = new stdClass();
$table->width = '100%';
$table->class = 'databox filters';

View File

@ -33,6 +33,31 @@ require_once $config['homedir'].'/include/functions_agents.php';
require_once $config['homedir'].'/godmode/wizards/Wizard.main.php';
/**
* Undocumented function
*
* @param string $url Url.
* @param array $params Params.
*
* @return mixed Result
*/
function curl(string $url, array $params)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
$get_result = curl_exec($ch);
curl_close($ch);
return $get_result;
}
/**
* Show Quick Shell interface.
*
@ -110,7 +135,7 @@ function quickShell()
// No username provided, ask for it.
$wiz = new Wizard();
$test = file_get_contents($ws_url, false, $context);
$test = curl($ws_url, []);
if ($test === false) {
ui_print_error_message(__('WebService engine has not been started, please check documentation.'));
$wiz->printForm(
@ -210,7 +235,7 @@ function quickShell()
// If rediretion is enabled, we will try to connect using
// http:// or https:// endpoint.
$test = get_headers($ws_url, null, $context);
$test = get_headers($ws_url, false, $context);
if ($test === false) {
if (empty($wiz) === true) {
$wiz = new Wizard();

View File

@ -425,7 +425,7 @@ function resource_exportation_extension_main()
echo '<br /><br />';
$table = null;
$table = new stdClass();
$table->width = '100%';
$table->style[0] = 'width: 30%;';
$table->style[1] = 'width: 10%;';

View File

@ -1,19 +1,32 @@
START TRANSACTION;
ALTER TABLE `tpolicy_queue` MODIFY COLUMN `progress` int(10) NOT NULL default '0';
CREATE INDEX `IDX_tservice_element` ON `tservice_element`(`id_service`,`id_agente_modulo`);
ALTER TABLE `tusuario` ADD COLUMN `local_user` tinyint(1) unsigned NOT NULL DEFAULT 0;
ALTER TABLE tevent_response ADD COLUMN display_command tinyint(1) default 0;
ALTER TABLE `talert_execution_queue`
DROP COLUMN `id_alert_template_module`,
DROP COLUMN `alert_mode`,
DROP COLUMN `extra_macros`,
MODIFY COLUMN `data` LONGTEXT;
ALTER TABLE `talert_templates` ADD COLUMN `schedule` TEXT;
ALTER TABLE `tevent_alert` ADD COLUMN `schedule` TEXT;
SOURCE procedures/alertTemplates.sql;
CALL `migrateRanges`();
DROP PROCEDURE `migrateRanges`;
SOURCE procedures/alertEvents.sql;
CALL `migrateEventRanges`();
DROP PROCEDURE `migrateEventRanges`;
ALTER TABLE `tautoconfig` ADD COLUMN `disabled` TINYINT DEFAULT 0;
UPDATE `tpolicy_groups` SET `policy_applied`=0;
CREATE TABLE IF NOT EXISTS `tpolicy_group_agents` (
`id` SERIAL,
`id_policy` INT UNSIGNED,
`id_agent` INT UNSIGNED,
`direct` TINYINT UNSIGNED DEFAULT 0,
FOREIGN KEY (`id_policy`) REFERENCES `tpolicies`(`id`)
ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`id_agent`) REFERENCES `tagente`(`id_agente`)
ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
COMMIT;

View File

@ -1,40 +0,0 @@
CREATE PROCEDURE migrateEventRanges()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE i INT;
DECLARE r TEXT;
DECLARE cur1 CURSOR FOR SELECT `id` FROM `tevent_alert`;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
UPDATE `tevent_alert` SET `schedule` = '{"monday":_1_,"tuesday":_2_,"wednesday":_3_,"thursday":_4_,"friday":_5_,"saturday":_6_,"sunday":_7_}';
UPDATE `tevent_alert` SET `time_from` = "00:00:00", `time_to` = "00:00:00" WHERE `time_from` = `time_to`;
OPEN cur1;
read_loop: LOOP
FETCH cur1 INTO i;
IF done THEN
LEAVE read_loop;
END IF;
SELECT concat('[{"start":"', `time_from`, '","end":"', `time_to`, '"}]') into r FROM `tevent_alert` WHERE `id` = i;
UPDATE `tevent_alert` SET `schedule` = REPLACE(`schedule`, "_1_", r) WHERE `monday` > 0 AND `id` = i;
UPDATE `tevent_alert` SET `schedule` = REPLACE(`schedule`, "_2_", r) WHERE `tuesday` > 0 AND `id` = i;
UPDATE `tevent_alert` SET `schedule` = REPLACE(`schedule`, "_3_", r) WHERE `wednesday` > 0 AND `id` = i;
UPDATE `tevent_alert` SET `schedule` = REPLACE(`schedule`, "_4_", r) WHERE `thursday` > 0 AND `id` = i;
UPDATE `tevent_alert` SET `schedule` = REPLACE(`schedule`, "_5_", r) WHERE `friday` > 0 AND `id` = i;
UPDATE `tevent_alert` SET `schedule` = REPLACE(`schedule`, "_6_", r) WHERE `saturday` > 0 AND `id` = i;
UPDATE `tevent_alert` SET `schedule` = REPLACE(`schedule`, "_7_", r) WHERE `sunday` > 0 AND `id` = i;
UPDATE `tevent_alert` SET `schedule` = REPLACE(`schedule`, "_1_", '""') WHERE `monday` = 0 AND `id` = i;
UPDATE `tevent_alert` SET `schedule` = REPLACE(`schedule`, "_2_", '""') WHERE `tuesday` = 0 AND `id` = i;
UPDATE `tevent_alert` SET `schedule` = REPLACE(`schedule`, "_3_", '""') WHERE `wednesday` = 0 AND `id` = i;
UPDATE `tevent_alert` SET `schedule` = REPLACE(`schedule`, "_4_", '""') WHERE `thursday` = 0 AND `id` = i;
UPDATE `tevent_alert` SET `schedule` = REPLACE(`schedule`, "_5_", '""') WHERE `friday` = 0 AND `id` = i;
UPDATE `tevent_alert` SET `schedule` = REPLACE(`schedule`, "_6_", '""') WHERE `saturday` = 0 AND `id` = i;
UPDATE `tevent_alert` SET `schedule` = REPLACE(`schedule`, "_7_", '""') WHERE `sunday` = 0 AND `id` = i;
END LOOP;
CLOSE cur1;
END ;

View File

@ -1,40 +0,0 @@
CREATE PROCEDURE migrateRanges()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE i INT;
DECLARE r TEXT;
DECLARE cur1 CURSOR FOR SELECT `id` FROM `talert_templates`;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
UPDATE `talert_templates` SET `schedule` = '{"monday":_1_,"tuesday":_2_,"wednesday":_3_,"thursday":_4_,"friday":_5_,"saturday":_6_,"sunday":_7_}';
UPDATE `talert_templates` SET `time_from` = "00:00:00", `time_to` = "00:00:00" WHERE `time_from` = `time_to`;
OPEN cur1;
read_loop: LOOP
FETCH cur1 INTO i;
IF done THEN
LEAVE read_loop;
END IF;
SELECT concat('[{"start":"', `time_from`, '","end":"', `time_to`, '"}]') into r FROM `talert_templates` WHERE `id` = i;
UPDATE `talert_templates` SET `schedule` = REPLACE(`schedule`, "_1_", r) WHERE `monday` > 0 AND `id` = i;
UPDATE `talert_templates` SET `schedule` = REPLACE(`schedule`, "_2_", r) WHERE `tuesday` > 0 AND `id` = i;
UPDATE `talert_templates` SET `schedule` = REPLACE(`schedule`, "_3_", r) WHERE `wednesday` > 0 AND `id` = i;
UPDATE `talert_templates` SET `schedule` = REPLACE(`schedule`, "_4_", r) WHERE `thursday` > 0 AND `id` = i;
UPDATE `talert_templates` SET `schedule` = REPLACE(`schedule`, "_5_", r) WHERE `friday` > 0 AND `id` = i;
UPDATE `talert_templates` SET `schedule` = REPLACE(`schedule`, "_6_", r) WHERE `saturday` > 0 AND `id` = i;
UPDATE `talert_templates` SET `schedule` = REPLACE(`schedule`, "_7_", r) WHERE `sunday` > 0 AND `id` = i;
UPDATE `talert_templates` SET `schedule` = REPLACE(`schedule`, "_1_", '""') WHERE `monday` = 0 AND `id` = i;
UPDATE `talert_templates` SET `schedule` = REPLACE(`schedule`, "_2_", '""') WHERE `tuesday` = 0 AND `id` = i;
UPDATE `talert_templates` SET `schedule` = REPLACE(`schedule`, "_3_", '""') WHERE `wednesday` = 0 AND `id` = i;
UPDATE `talert_templates` SET `schedule` = REPLACE(`schedule`, "_4_", '""') WHERE `thursday` = 0 AND `id` = i;
UPDATE `talert_templates` SET `schedule` = REPLACE(`schedule`, "_5_", '""') WHERE `friday` = 0 AND `id` = i;
UPDATE `talert_templates` SET `schedule` = REPLACE(`schedule`, "_6_", '""') WHERE `saturday` = 0 AND `id` = i;
UPDATE `talert_templates` SET `schedule` = REPLACE(`schedule`, "_7_", '""') WHERE `sunday` = 0 AND `id` = i;
END LOOP;
CLOSE cur1;
END ;

View File

@ -213,6 +213,20 @@ CREATE TABLE IF NOT EXISTS `tpolicy_groups` (
UNIQUE (`id_policy`, `id_group`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- -----------------------------------------------------
-- Table `tpolicy_group_agents`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `tpolicy_group_agents` (
`id` SERIAL,
`id_policy` INT UNSIGNED,
`id_agent` INT UNSIGNED,
`direct` TINYINT UNSIGNED DEFAULT 0,
FOREIGN KEY (`id_policy`) REFERENCES `tpolicies`(`id`)
ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`id_agent`) REFERENCES `tagente`(`id_agente`)
ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ---------------------------------------------------------------------
-- Table `tdashboard`
-- ---------------------------------------------------------------------
@ -1551,6 +1565,7 @@ ALTER TABLE `tusuario` MODIFY COLUMN `default_event_filter` int(10) unsigned NOT
DROP INDEX `fk_id_filter`;
ALTER TABLE `tusuario` ADD COLUMN `integria_user_level_user` VARCHAR(60);
ALTER TABLE `tusuario` ADD COLUMN `integria_user_level_pass` VARCHAR(45);
ALTER TABLE `tusuario` ADD COLUMN `local_user` tinyint(1) unsigned NOT NULL DEFAULT 0;
-- ---------------------------------------------------------------------
@ -4123,14 +4138,11 @@ ALTER TABLE `tperfil` ADD COLUMN `network_config_management`tinyint(1) NOT NULL
-- Table `talert_execution_queue`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `talert_execution_queue` (
`id` int(10) unsigned NOT NULL auto_increment,
`id_alert_template_module` int(10) unsigned NOT NULL,
`alert_mode` tinyint(1) NOT NULL,
`data` mediumtext NOT NULL,
`extra_macros` text,
`utimestamp` bigint(20) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`data` LONGTEXT,
`utimestamp` BIGINT NOT NULL DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4;
UPDATE `tlanguage` SET `name` = 'Deutsch' WHERE `id_language` = 'de';

View File

@ -36,30 +36,32 @@ echo sprintf('<div id="header_table" class="header_table_%s">', $menuTypeClass);
).'</div>';
// ======= Servers List ===============================================
$servers_list = '<div id="servers_list">';
$servers = [];
$servers['all'] = (int) db_get_value('COUNT(id_server)', 'tserver');
if ($servers['all'] != 0) {
$servers['up'] = (int) servers_check_status();
$servers['down'] = ($servers['all'] - $servers['up']);
if ($servers['up'] == 0) {
// All Servers down or no servers at all.
$servers_check_img = html_print_image('images/header_down_gray.png', true, ['alt' => 'cross', 'class' => 'bot', 'title' => __('All systems').': '.__('Down')]);
} else if ($servers['down'] != 0) {
// Some servers down.
$servers_check_img = html_print_image('images/header_warning_gray.png', true, ['alt' => 'error', 'class' => 'bot', 'title' => $servers['down'].' '.__('servers down')]);
} else {
// All servers up.
$servers_check_img = html_print_image('images/header_ready_gray.png', true, ['alt' => 'ok', 'class' => 'bot', 'title' => __('All systems').': '.__('Ready')]);
}
if ((bool) check_acl($config['id_user'], 0, 'AW') !== false) {
$servers_list = '<div id="servers_list">';
$servers = [];
$servers['all'] = (int) db_get_value('COUNT(id_server)', 'tserver');
if ($servers['all'] != 0) {
$servers['up'] = (int) servers_check_status();
$servers['down'] = ($servers['all'] - $servers['up']);
if ($servers['up'] == 0) {
// All Servers down or no servers at all.
$servers_check_img = html_print_image('images/header_down_gray.png', true, ['alt' => 'cross', 'class' => 'bot', 'title' => __('All systems').': '.__('Down')]);
} else if ($servers['down'] != 0) {
// Some servers down.
$servers_check_img = html_print_image('images/header_warning_gray.png', true, ['alt' => 'error', 'class' => 'bot', 'title' => $servers['down'].' '.__('servers down')]);
} else {
// All servers up.
$servers_check_img = html_print_image('images/header_ready_gray.png', true, ['alt' => 'ok', 'class' => 'bot', 'title' => __('All systems').': '.__('Ready')]);
}
unset($servers);
// Since this is the header, we don't like to trickle down variables.
$servers_check_img_link = '<a class="white" href="index.php?sec=gservers&sec2=godmode/servers/modificar_server&refr=60">';
$servers_check_img_link .= $servers_check_img;
$servers_check_img_link .= '</a>';
};
$servers_list .= $servers_check_img_link.'</div>';
unset($servers);
// Since this is the header, we don't like to trickle down variables.
$servers_check_img_link = '<a class="white" href="index.php?sec=gservers&sec2=godmode/servers/modificar_server&refr=60">';
$servers_check_img_link .= $servers_check_img;
$servers_check_img_link .= '</a>';
};
$servers_list .= $servers_check_img_link.'</div>';
}
@ -206,6 +208,8 @@ echo sprintf('<div id="header_table" class="header_table_%s">', $menuTypeClass);
$select[0]['autorefresh_white_list']
);
$header_autorefresh = '';
$header_autorefresh_counter = '';
if ($config['legacy_vc']
|| ($_GET['sec2'] !== 'operation/visual_console/render_view')
|| (($_GET['sec2'] !== 'operation/visual_console/render_view')
@ -900,6 +904,7 @@ echo sprintf('<div id="header_table" class="header_table_%s">', $menuTypeClass);
if ($_GET['refr']
|| (isset($do_refresh) === true && $do_refresh === true)
) {
$autorefresh_draw = false;
if ($_GET['sec2'] == 'operation/events/events') {
$autorefresh_draw = true;
}

View File

@ -36,10 +36,10 @@ if (isset($config['id_user']) === false) {
<script type="text/javascript" language="javascript">
$(document).ready(function(){
var menuType_value = "<?php echo $_SESSION['menu_type']; ?>";
var menuType_value = "<?php echo ($_SESSION['menu_type'] ?? ''); ?>";
if (menuType_value === '' || menuType_value === 'classic') {
$('ul.submenu').css('left', '214px');
$('ul.submenu').css('left', '214px');
}
else{
$('ul.submenu').css('left', '59px');
@ -107,7 +107,12 @@ echo '</a></div>';
require 'operation/menu.php';
require 'godmode/menu.php';
echo sprintf('<div id="button_collapse" class="button_%s button_collapse"></div>', $menuTypeClass);
html_print_div(
[
'id' => 'button_collapse',
'class' => sprintf('button_collapse button_%s', $menuTypeClass),
]
);
echo '</div>';
// Menu_container.
@ -122,7 +127,7 @@ if (isset($config['fixed_header']) === true) {
<script type="text/javascript" language="javascript">
/* <![CDATA[ */
$('#button_collapse').on('click', function() {
$('#button_collapse').on('click', function() {
if($('#menu_full').hasClass('menu_full_classic')){
localStorage.setItem("menuType", "collapsed");
@ -155,7 +160,7 @@ $('#button_collapse').on('click', function() {
$('.logo_full').toggle();
$('.logo_icon').toggle();
$('#menu_full').toggleClass('menu_full_classic menu_full_collapsed');
$('#menu_full').toggleClass('menu_full_classic menu_full_collapsed');
$('#button_collapse').toggleClass('button_classic button_collapsed');
$('div#title_menu').toggleClass('title_menu_classic title_menu_collapsed');
$('div#page').toggleClass('page_classic page_collapsed');
@ -389,9 +394,9 @@ $(document).ready(function() {
if( typeof(table_hover) != 'undefined')
$("ul#sub"+table_hover[0].id).hide();
if( typeof(table_hover2) != 'undefined')
$("ul#sub"+table_hover2[0].id).hide();
});
$("ul#sub"+table_hover2[0].id).hide();
});
$('div.menu>ul>li>ul>li>ul>li>a').click(function() {
openTime = 4000;
if( typeof(table_hover) != 'undefined')
@ -399,7 +404,7 @@ $(document).ready(function() {
if( typeof(table_hover2) != 'undefined')
$("ul#sub"+table_hover2[0].id).hide();
});
});
</script>

View File

@ -47,7 +47,7 @@ if (is_ajax()) {
$string = (string) get_parameter('q');
// Field q is what autocomplete plugin gives.
$filter = [];
$filter[] = '(nombre COLLATE utf8_general_ci LIKE "%'.$string.'%" OR direccion LIKE "%'.$string.'%" OR comentarios LIKE "%'.$string.'%" OR alias LIKE "%'.$string.'%")';
$filter[] = '(nombre LIKE "%'.$string.'%" OR direccion LIKE "%'.$string.'%" OR comentarios LIKE "%'.$string.'%" OR alias LIKE "%'.$string.'%")';
$filter[] = 'id_agente != '.$id_agent;
$agents = agents_get_agents(

View File

@ -30,8 +30,8 @@
global $config;
enterprise_include('godmode/agentes/configurar_agente.php');
enterprise_include('include/functions_policies.php');
enterprise_include_once('include/functions_modules.php');
enterprise_include('include/functions_policies.php');
require_once $config['homedir'].'/include/functions_agents.php';
require_once $config['homedir'].'/include/functions_cron.php';
ui_require_javascript_file('encode_decode_base64');
@ -307,23 +307,6 @@ if ($create_agent) {
$agent_created_ok = true;
$tpolicy_group_old = db_get_all_rows_sql(
'SELECT id_policy FROM tpolicy_groups
WHERE id_group = '.$grupo
);
if ($tpolicy_group_old) {
foreach ($tpolicy_group_old as $key => $old_group) {
db_process_sql_insert(
'tpolicy_agents',
[
'id_policy' => $old_group['id_policy'],
'id_agent' => $id_agente,
]
);
}
}
$info = '{"Name":"'.$nombre_agente.'",
"IP":"'.$direccion_agente.'",
"Group":"'.$grupo.'",
@ -1117,12 +1100,6 @@ if ($update_agent) {
// Force an update of the agent cache.
}
$group_old = db_get_sql('SELECT id_grupo FROM tagente WHERE id_agente ='.$id_agente);
$tpolicy_group_old = db_get_all_rows_sql(
'SELECT id_policy FROM tpolicy_groups
WHERE id_group = '.$group_old
);
$result = db_process_sql_update('tagente', $values, ['id_agente' => $id_agente]);
if ($result === false && $update_custom_result == false) {
@ -1161,59 +1138,6 @@ if ($update_agent) {
}
}
if ($tpolicy_group_old) {
foreach ($tpolicy_group_old as $key => $value) {
$tpolicy_agents_old = db_get_sql(
'SELECT * FROM tpolicy_agents
WHERE id_policy = '.$value['id_policy'].' AND id_agent = '.$id_agente
);
if ($tpolicy_agents_old) {
$result2 = db_process_sql_update(
'tpolicy_agents',
['pending_delete' => 1],
[
'id_agent' => $id_agente,
'id_policy' => $value['id_policy'],
]
);
}
}
}
$tpolicy_group = db_get_all_rows_sql(
'SELECT id_policy FROM tpolicy_groups
WHERE id_group = '.$grupo
);
if ($tpolicy_group) {
foreach ($tpolicy_group as $key => $value) {
$tpolicy_agents = db_get_sql(
'SELECT * FROM tpolicy_agents
WHERE id_policy = '.$value['id_policy'].' AND id_agent ='.$id_agente
);
if (!$tpolicy_agents) {
db_process_sql_insert(
'tpolicy_agents',
[
'id_policy' => $value['id_policy'],
'id_agent' => $id_agente,
]
);
} else {
$result3 = db_process_sql_update(
'tpolicy_agents',
['pending_delete' => 0],
[
'id_agent' => $id_agente,
'id_policy' => $value['id_policy'],
]
);
}
}
}
$info = '{
"id_agente":"'.$id_agente.'",
"alias":"'.$alias.'",

View File

@ -374,23 +374,6 @@ echo '</form>';
echo '<td>';
echo '</tr></table>';
$order_collation = '';
switch ($config['dbtype']) {
case 'mysql':
$order_collation = '';
$order_collation = 'COLLATE utf8_general_ci';
break;
case 'postgresql':
case 'oracle':
$order_collation = '';
break;
default:
// Default.
break;
}
$selected = true;
$selectNameUp = false;
$selectNameDown = false;
@ -405,7 +388,7 @@ switch ($sortField) {
$selectRemoteUp = $selected;
$order = [
'field' => 'remote ',
'field2' => 'nombre '.$order_collation,
'field2' => 'nombre ',
'order' => 'ASC',
];
break;
@ -414,7 +397,7 @@ switch ($sortField) {
$selectRemoteDown = $selected;
$order = [
'field' => 'remote ',
'field2' => 'nombre '.$order_collation,
'field2' => 'nombre ',
'order' => 'DESC',
];
break;
@ -430,8 +413,8 @@ switch ($sortField) {
case 'up':
$selectNameUp = $selected;
$order = [
'field' => 'alias '.$order_collation,
'field2' => 'alias '.$order_collation,
'field' => 'alias ',
'field2' => 'alias ',
'order' => 'ASC',
];
break;
@ -439,8 +422,8 @@ switch ($sortField) {
case 'down':
$selectNameDown = $selected;
$order = [
'field' => 'alias '.$order_collation,
'field2' => 'alias '.$order_collation,
'field' => 'alias ',
'field2' => 'alias ',
'order' => 'DESC',
];
break;
@ -457,7 +440,7 @@ switch ($sortField) {
$selectOsUp = $selected;
$order = [
'field' => 'id_os',
'field2' => 'alias '.$order_collation,
'field2' => 'alias ',
'order' => 'ASC',
];
break;
@ -466,7 +449,7 @@ switch ($sortField) {
$selectOsDown = $selected;
$order = [
'field' => 'id_os',
'field2' => 'alias '.$order_collation,
'field2' => 'alias ',
'order' => 'DESC',
];
break;
@ -483,7 +466,7 @@ switch ($sortField) {
$selectGroupUp = $selected;
$order = [
'field' => 'id_grupo',
'field2' => 'alias '.$order_collation,
'field2' => 'alias ',
'order' => 'ASC',
];
break;
@ -492,7 +475,7 @@ switch ($sortField) {
$selectGroupDown = $selected;
$order = [
'field' => 'id_grupo',
'field2' => 'alias '.$order_collation,
'field2' => 'alias ',
'order' => 'DESC',
];
break;
@ -511,8 +494,8 @@ switch ($sortField) {
$selectGroupUp = '';
$selectGroupDown = '';
$order = [
'field' => 'alias '.$order_collation,
'field2' => 'alias '.$order_collation,
'field' => 'alias ',
'field2' => 'alias ',
'order' => 'ASC',
];
break;
@ -520,30 +503,45 @@ switch ($sortField) {
$search_sql = '';
if ($search != '') {
$sql = "SELECT DISTINCT taddress_agent.id_agent FROM taddress
INNER JOIN taddress_agent ON
taddress.id_a = taddress_agent.id_a
WHERE taddress.ip LIKE '%$search%'";
$sql = sprintf(
'SELECT DISTINCT taddress_agent.id_agent FROM taddress
INNER JOIN taddress_agent ON
taddress.id_a = taddress_agent.id_a
WHERE taddress.ip LIKE "%%%s%%"',
$search
);
$id = db_get_all_rows_sql($sql);
if ($id != '') {
$aux = $id[0]['id_agent'];
$search_sql = ' AND ( LOWER(nombre) '.$order_collation."
LIKE LOWER('%$search%') OR tagente.id_agente = $aux";
if (count($id) >= 2) {
for ($i = 1; $i < count($id); $i++) {
$search_sql = sprintf(
' AND ( `nombre` LIKE "%%%s%%" OR tagente.id_agente = %d',
$search,
$aux
);
$nagent_count = count($id);
if ($nagent_count >= 2) {
for ($i = 1; $i < $nagent_count; $i++) {
$aux = $id[$i]['id_agent'];
$search_sql .= " OR tagente.id_agente = $aux";
$search_sql .= sprintf(
' OR tagente.id_agente = %d',
$aux
);
}
}
$search_sql .= ')';
} else {
$search_sql = ' AND ( nombre '.$order_collation."
LIKE LOWER('%$search%') OR alias ".$order_collation."
LIKE LOWER('%$search%') OR comentarios ".$order_collation." LIKE LOWER('%$search%')
OR EXISTS (SELECT * FROM tagent_custom_data
WHERE id_agent = id_agente AND description LIKE '%$search%'))";
$search_sql = sprintf(
' AND ( nombre
LIKE "%%%s%%" OR alias
LIKE "%%%s%%" OR comentarios LIKE "%%%s%%"
OR EXISTS (SELECT * FROM tagent_custom_data WHERE id_agent = id_agente AND description LIKE "%%%s%%"))',
$search,
$search,
$search,
$search
);
}
}

View File

@ -1,27 +1,53 @@
<?php
/**
* Planned downtimes list.
*
* @category Planned downtimes
* @package Pandora FMS
* @subpackage Community
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2022 Artica Soluciones Tecnologicas
* Please see http://pandorafms.org for full contribution list
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation for version 2.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* ============================================================================
*/
// Pandora FMS - http://pandorafms.com
// ==================================================
// Copyright (c) 2005-2021 Artica Soluciones Tecnologicas
// Please see http://pandorafms.org for full contribution list
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation for version 2.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// Load global vars
// Load global vars.
global $config;
check_login();
$read_permisson = check_acl($config['id_user'], 0, 'AR');
$write_permisson = check_acl($config['id_user'], 0, 'AD');
$manage_permisson = check_acl($config['id_user'], 0, 'AW');
$access = ($read_permisson == true) ? 'AR' : (($write_permisson == true) ? 'AD' : (($manage_permisson == true) ? 'AW' : 'AR'));
$read_permisson = (bool) check_acl($config['id_user'], 0, 'AR');
$write_permisson = (bool) check_acl($config['id_user'], 0, 'AD');
$manage_permisson = (bool) check_acl($config['id_user'], 0, 'AW');
$access = null;
if ($read_permisson === true) {
$access = 'AR';
}
if (! $read_permisson && !$manage_permisson) {
if ($write_permisson === true) {
$access = 'AD';
}
if ($manage_permisson === true) {
$access = 'AW';
}
if ($read_permisson === false && $manage_permisson === false) {
db_pandora_audit(
AUDIT_LOG_ACL_VIOLATION,
'Trying to access downtime scheduler'
@ -35,16 +61,109 @@ require_once 'include/functions_events.php';
require_once 'include/functions_planned_downtimes.php';
require_once 'include/functions_reporting.php';
$malformed_downtimes = planned_downtimes_get_malformed();
$malformed_downtimes_exist = !empty($malformed_downtimes) ? true : false;
if (is_ajax() === true) {
$show_info_agents_modules_affected = (bool) get_parameter(
'show_info_agents_modules_affected',
false
);
$get_info_agents_modules_affected = (bool) get_parameter(
'get_info_agents_modules_affected',
false
);
if ($show_info_agents_modules_affected === true) {
$id = (int) get_parameter('id', 0);
$columns = [
'agent_name',
'module_name',
];
$column_names = [
__('Agents'),
__('Modules'),
];
ui_print_datatable(
[
'id' => 'agent_modules_affected_planned_downtime',
'class' => 'info_table',
'style' => 'width: 100%',
'columns' => $columns,
'column_names' => $column_names,
'ajax_url' => 'godmode/agentes/planned_downtime.list',
'ajax_data' => [
'get_info_agents_modules_affected' => 1,
'id' => $id,
],
'order' => [
'field' => 'agent_name',
'direction' => 'asc',
],
'search_button_class' => 'sub filter float-right',
'form' => [
'inputs' => [
[
'label' => __('Agents'),
'type' => 'text',
'class' => 'w200px',
'id' => 'filter_agents',
'name' => 'filter_agents',
],
[
'label' => __('Modules'),
'type' => 'text',
'class' => 'w200px',
'id' => 'filter_modules',
'name' => 'filter_modules',
],
],
],
]
);
return;
}
if ($get_info_agents_modules_affected === true) {
$id = (int) get_parameter('id', 0);
// Catch post parameters.
$options = [
'limit' => get_parameter('start', 0),
'offset' => get_parameter('length', $config['block_size']),
'order' => get_datatable_order(),
'filters' => get_parameter('filter', []),
];
$modules = get_agents_modules_planned_dowtime($id, $options);
$count = get_agents_modules_planned_dowtime($id, $options, $count);
echo json_encode(
[
'data' => $modules,
'recordsTotal' => $count[0]['total'],
'recordsFiltered' => $count[0]['total'],
]
);
return;
}
return;
}
$malformed_downtimes = planned_downtimes_get_malformed();
$malformed_downtimes_exist = (empty($malformed_downtimes) === false) ? true : false;
$migrate_malformed = (bool) get_parameter('migrate_malformed');
if ($migrate_malformed) {
if ($migrate_malformed === true) {
$migration_result = planned_downtimes_migrate_malformed_downtimes();
if ($migration_result['status'] == false) {
$str = 'An error occurred while migrating the malformed scheduled downtimes';
$str2 = 'Please run the migration again or contact with the administrator';
if ((bool) $migration_result['status'] === false) {
ui_print_error_message(
__('An error occurred while migrating the malformed scheduled downtimes').'. '.__('Please run the migration again or contact with the administrator')
__($str).'. '.__($str2)
);
echo '<br>';
}
@ -63,12 +182,15 @@ ui_print_page_header(
$id_downtime = (int) get_parameter('id_downtime', 0);
$stop_downtime = (bool) get_parameter('stop_downtime');
// STOP DOWNTIME
if ($stop_downtime) {
// STOP DOWNTIME.
if ($stop_downtime === true) {
$downtime = db_get_row('tplanned_downtime', 'id', $id_downtime);
// Check AD permission on the downtime
if (empty($downtime) || (! check_acl($config['id_user'], $downtime['id_group'], 'AD') && ! check_acl($config['id_user'], $downtime['id_group'], 'AW'))) {
// Check AD permission on the downtime.
if (empty($downtime) === true
|| ((bool) check_acl($config['id_user'], $downtime['id_group'], 'AD') === false
&& (bool) check_acl($config['id_user'], $downtime['id_group'], 'AW') === false)
) {
db_pandora_audit(
AUDIT_LOG_ACL_VIOLATION,
'Trying to access downtime scheduler'
@ -80,7 +202,9 @@ if ($stop_downtime) {
$result = planned_downtimes_stop($downtime);
if ($result === false) {
ui_print_error_message(__('An error occurred stopping the scheduled downtime'));
ui_print_error_message(
__('An error occurred stopping the scheduled downtime')
);
} else {
echo $result['message'];
}
@ -88,11 +212,14 @@ if ($stop_downtime) {
$delete_downtime = (int) get_parameter('delete_downtime');
// DELETE WHOLE DOWNTIME!
if ($delete_downtime) {
if (empty($delete_downtime) === false) {
$downtime = db_get_row('tplanned_downtime', 'id', $id_downtime);
// Check AD permission on the downtime
if (empty($downtime) || (! check_acl($config['id_user'], $downtime['id_group'], 'AD') && ! check_acl($config['id_user'], $downtime['id_group'], 'AW'))) {
// Check AD permission on the downtime.
if (empty($downtime) === true
|| ((bool) check_acl($config['id_user'], $downtime['id_group'], 'AD') === false
&& (bool) check_acl($config['id_user'], $downtime['id_group'], 'AW') === false)
) {
db_pandora_audit(
AUDIT_LOG_ACL_VIOLATION,
'Trying to access downtime scheduler'
@ -102,10 +229,13 @@ if ($delete_downtime) {
}
// The downtime shouldn't be running!!
if ($downtime['executed']) {
if ((bool) $downtime['executed'] === true) {
ui_print_error_message(__('This scheduled downtime is running'));
} else {
$result = db_process_sql_delete('tplanned_downtime', ['id' => $id_downtime]);
$result = db_process_sql_delete(
'tplanned_downtime',
['id' => $id_downtime]
);
ui_print_result_message(
$result,
@ -119,15 +249,25 @@ if ($delete_downtime) {
$offset = (int) get_parameter('offset');
$filter_params = [];
$search_text = $filter_params['search_text'] = (string) get_parameter('search_text');
$date_from = $filter_params['date_from'] = (string) get_parameter('date_from');
$date_to = $filter_params['date_to'] = (string) get_parameter('date_to');
$execution_type = $filter_params['execution_type'] = (string) get_parameter('execution_type');
$show_archived = $filter_params['archived'] = (bool) get_parameter('archived');
$agent_id = $filter_params['agent_id'] = (int) get_parameter('agent_id');
$agent_name = $filter_params['agent_name'] = (string) (!empty($agent_id) ? get_parameter('agent_name') : '');
$module_id = $filter_params['module_id'] = (int) get_parameter('module_name_hidden');
$module_name = $filter_params['module_name'] = (string) (!empty($module_id) ? get_parameter('module_name') : '');
$search_text = (string) get_parameter('search_text');
$date_from = (string) get_parameter('date_from');
$date_to = (string) get_parameter('date_to');
$execution_type = (string) get_parameter('execution_type');
$show_archived = (bool) get_parameter('archived');
$agent_id = (int) get_parameter('agent_id');
$agent_name = (string) ((empty($agent_id) === false) ? get_parameter('agent_name') : '');
$module_id = (int) get_parameter('module_name_hidden');
$module_name = (string) ((empty($module_id) === false) ? get_parameter('module_name') : '');
$filter_params['search_text'] = $search_text;
$filter_params['date_from'] = $date_from;
$filter_params['date_to'] = $date_to;
$filter_params['execution_type'] = $execution_type;
$filter_params['archived'] = $show_archived;
$filter_params['agent_id'] = $agent_id;
$filter_params['agent_name'] = $agent_name;
$filter_params['module_id'] = $module_id;
$filter_params['module_name'] = $module_name;
$filter_params_str = http_build_query($filter_params);
@ -141,11 +281,32 @@ $table_form->data = [];
$row = [];
// Search text.
$row[] = __('Search').'&nbsp;'.html_print_input_text('search_text', $search_text, '', 50, 250, true);
$row[] = __('Search').'&nbsp;'.html_print_input_text(
'search_text',
$search_text,
'',
50,
250,
true
);
// Dates.
$date_inputs = __('From').'&nbsp;'.html_print_input_text('date_from', $date_from, '', 10, 10, true);
$date_inputs = __('From').'&nbsp;'.html_print_input_text(
'date_from',
$date_from,
'',
10,
10,
true
);
$date_inputs .= '&nbsp;&nbsp;';
$date_inputs .= __('To').'&nbsp;'.html_print_input_text('date_to', $date_to, '', 10, 10, true);
$date_inputs .= __('To').'&nbsp;'.html_print_input_text(
'date_to',
$date_to,
'',
10,
10,
true
);
$row[] = $date_inputs;
$table_form->data[] = $row;
@ -157,9 +318,24 @@ $execution_type_fields = [
'once' => __('Once'),
'periodically' => __('Periodically'),
];
$row[] = __('Execution type').'&nbsp;'.html_print_select($execution_type_fields, 'execution_type', $execution_type, '', __('Any'), '', true, false, false);
$row[] = __('Execution type').'&nbsp;'.html_print_select(
$execution_type_fields,
'execution_type',
$execution_type,
'',
__('Any'),
'',
true,
false,
false
);
// Show past downtimes.
$row[] = __('Show past downtimes').'&nbsp;'.html_print_checkbox('archived', 1, $show_archived, true);
$row[] = __('Show past downtimes').'&nbsp;'.html_print_checkbox(
'archived',
1,
$show_archived,
true
);
$table_form->data[] = $row;
@ -178,48 +354,84 @@ $agent_input = __('Agent').'&nbsp;'.ui_print_agent_autocomplete_input($params);
$row[] = $agent_input;
// Module.
$row[] = __('Module').'&nbsp;'.html_print_autocomplete_modules('module_name', $module_name, false, true, '', [], true);
$row[] = __('Module').'&nbsp;'.html_print_autocomplete_modules(
'module_name',
$module_name,
false,
true,
'',
[],
true
);
$row[] = html_print_submit_button(__('Search'), 'search', false, 'class="sub search"', true);
$row[] = html_print_submit_button(
__('Search'),
'search',
false,
'class="sub search"',
true
);
$table_form->data[] = $row;
// End of table filter.
// Useful to know if the user has done a form filtering.
$filter_performed = false;
$downtimes = [];
$groups = users_get_groups(false, $access);
if (!empty($groups)) {
if (empty($groups) === false) {
$where_values = '1=1';
$groups_string = implode(',', array_keys($groups));
$where_values .= " AND id_group IN ($groups_string)";
$where_values .= sprintf(' AND id_group IN (%s)', $groups_string);
// WARNING: add $filter_performed = true; to any future filter.
if (!empty($search_text)) {
if (empty($search_text) === false) {
$filter_performed = true;
$where_values .= " AND (name LIKE '%$search_text%' OR description LIKE '%$search_text%')";
$where_values .= sprintf(
' AND (name LIKE "%%%s%%" OR description LIKE "%%%s%%")',
$search_text,
$search_text
);
}
if (!empty($execution_type)) {
if (empty($execution_type) === false) {
$filter_performed = true;
$where_values .= " AND type_execution = '$execution_type'";
$where_values .= sprintf(' AND type_execution = "%s"', $execution_type);
}
if (!empty($date_from)) {
if (empty($date_from) === false) {
$filter_performed = true;
$where_values .= " AND (type_execution = 'periodically' OR (type_execution = 'once' AND date_from >= '".strtotime("$date_from 00:00:00")."'))";
$where_values .= sprintf(
' AND (type_execution = "periodically"
OR (type_execution = "once"
AND date_from >= "%s")
)',
strtotime($date_from.' 00:00:00')
);
}
if (!empty($date_to)) {
if (empty($date_to) === false) {
$filter_performed = true;
$periodically_monthly_w = "type_periodicity = 'monthly'
AND ((periodically_day_from <= '".date('d', strtotime($date_from))."' AND periodically_day_to >= '".date('d', strtotime($date_to))."')
OR (periodically_day_from > periodically_day_to
AND (periodically_day_from <= '".date('d', strtotime($date_from))."' OR periodically_day_to >= '".date('d', strtotime($date_to))."')))";
$periodically_monthly_w = sprintf(
'type_periodicity = "monthly" AND (
(
periodically_day_from <= "%s"
AND periodically_day_to >= "%s"
)
OR (
periodically_day_from > periodically_day_to
AND (
periodically_day_from <= "%s"
OR periodically_day_to >= "%s"
)
)
)',
date('d', strtotime($date_from)),
date('d', strtotime($date_to)),
date('d', strtotime($date_from)),
date('d', strtotime($date_to))
);
$periodically_weekly_days = [];
$date_from_aux = strtotime($date_from);
@ -229,7 +441,7 @@ if (!empty($groups)) {
while ($date_from_aux <= $date_end && $days_number < 7) {
$weekday_actual = strtolower(date('l', $date_from_aux));
$periodically_weekly_days[] = "$weekday_actual = 1";
$periodically_weekly_days[] = $weekday_actual.' = 1';
$date_from_aux = ($date_from_aux + SECONDS_1DAY);
$days_number++;
@ -237,36 +449,60 @@ if (!empty($groups)) {
$periodically_weekly_w = "type_periodicity = 'weekly' AND (".implode(' OR ', $periodically_weekly_days).')';
$periodically_w = "type_execution = 'periodically' AND (($periodically_monthly_w) OR ($periodically_weekly_w))";
$periodically_w = sprintf(
'type_execution = "periodically" AND ((%s) OR (%s))',
$periodically_monthly_w,
$periodically_weekly_w
);
$once_w = "type_execution = 'once' AND date_to <= '".strtotime("$date_to 23:59:59")."'";
$once_w = sprintf(
'type_execution = "once" AND date_to <= "%s"',
strtotime($date_to.' 23:59:59')
);
$where_values .= " AND (($periodically_w) OR ($once_w))";
$where_values .= sprintf(
' AND ((%s) OR (%s))',
$periodically_w,
$once_w
);
}
if (!$show_archived) {
if ($show_archived === false) {
$filter_performed = true;
$where_values .= " AND (type_execution = 'periodically' OR (type_execution = 'once' AND date_to >= '".time()."'))";
$where_values .= sprintf(
' AND (type_execution = "periodically"
OR (type_execution = "once"
AND date_to >= "%s"))',
time()
);
}
if (!empty($agent_id)) {
if (empty($agent_id) === false) {
$filter_performed = true;
$where_values .= " AND id IN (SELECT id_downtime FROM tplanned_downtime_agents WHERE id_agent = $agent_id)";
$where_values .= sprintf(
' AND id IN (SELECT id_downtime FROM tplanned_downtime_agents WHERE id_agent = %d)',
$agent_id
);
}
if (!empty($module_id)) {
if (empty($module_id) === false) {
$filter_performed = true;
$where_values .= " AND (id IN (SELECT id_downtime
FROM tplanned_downtime_modules
WHERE id_agent_module = $module_id)
OR id IN (SELECT id_downtime
FROM tplanned_downtime_agents tpda, tagente_modulo tam
WHERE tpda.id_agent = tam.id_agente
AND tam.id_agente_modulo = $module_id
AND tpda.all_modules = 1))";
$where_values .= sprintf(
' AND (id IN (
SELECT id_downtime
FROM tplanned_downtime_modules
WHERE id_agent_module = %d)
OR id IN (
SELECT id_downtime
FROM tplanned_downtime_agents tpda, tagente_modulo tam
WHERE tpda.id_agent = tam.id_agente
AND tam.id_agente_modulo = %d
AND tpda.all_modules = 1
)
)',
$module_id,
$module_id
);
}
// Columns of the table tplanned_downtime.
@ -296,68 +532,41 @@ if (!empty($groups)) {
'id_user',
];
switch ($config['dbtype']) {
case 'mysql':
case 'postgresql':
$columns_str = implode(',', $columns);
$sql = "SELECT $columns_str
FROM tplanned_downtime
WHERE $where_values
ORDER BY type_execution DESC, date_from DESC
LIMIT ".$config['block_size']."
OFFSET $offset";
break;
$columns_str = implode(',', $columns);
$sql = sprintf(
'SELECT %s
FROM tplanned_downtime
WHERE %s
ORDER BY type_execution DESC, date_from DESC
LIMIT %d
OFFSET %d',
$columns_str,
$where_values,
$config['block_size'],
$offset
);
case 'oracle':
// Oracle doesn't have TIME type, so we should transform the DATE value
$new_time_from = "TO_CHAR(periodically_time_from, 'HH24:MI:SS') AS periodically_time_from";
$new_time_to = "TO_CHAR(periodically_time_to, 'HH24:MI:SS') AS periodically_time_to";
$time_from_key = array_search('periodically_time_from', $columns);
$time_to_key = array_search('periodically_time_to', $columns);
if ($time_from_key !== false) {
$columns[$time_from_key] = $new_time_from;
}
if ($time_to_key !== false) {
$columns[$time_to_key] = $new_time_to;
}
$columns_str = implode(',', $columns);
$set = [];
$set['limit'] = $config['block_size'];
$set['offset'] = $offset;
$sql = "SELECT $columns_str
FROM tplanned_downtime
WHERE $where_values
ORDER BY type_execution DESC, date_from DESC";
$sql = oracle_recode_query($sql, $set);
break;
}
$sql_count = "SELECT COUNT(id) AS num
FROM tplanned_downtime
WHERE $where_values";
$sql_count = sprintf(
'SELECT COUNT(id) AS num
FROM tplanned_downtime
WHERE %s',
$where_values
);
$downtimes = db_get_all_rows_sql($sql);
$downtimes_number_res = db_get_all_rows_sql($sql_count);
$downtimes_number = $downtimes_number_res != false ? $downtimes_number_res[0]['num'] : 0;
} else {
$downtimes = [];
$downtimes_number = ($downtimes_number_res !== false) ? $downtimes_number_res[0]['num'] : 0;
}
$url_list = 'index.php?sec=extensions&sec2=godmode/agentes/planned_downtime.list';
$url_editor = 'index.php?sec=extensions&sec2=godmode/agentes/planned_downtime.editor';
// No downtimes cause the user has not anyone.
if (!$downtimes && !$filter_performed) {
if ($downtimes === false && $filter_performed === false) {
include_once $config['homedir'].'/general/first_task/planned_downtime.php';
}
// No downtimes cause the user performed a search.
else if (!$downtimes) {
} else if ($downtimes === false) {
// No downtimes cause the user performed a search.
// Filter form.
echo "<form method='post' action='index.php?sec=extensions&sec2=godmode/agentes/planned_downtime.list'>";
echo '<form method="post" action="'.$url_list.'">';
html_print_table($table_form);
echo '</form>';
@ -367,22 +576,25 @@ else if (!$downtimes) {
echo '<div class="action-buttons w100p" >';
// Create button.
if ($write_permisson) {
if ($write_permisson === true) {
echo '&nbsp;';
echo '<form method="post" class="display_in" action="index.php?sec=extensions&amp;sec2=godmode/agentes/planned_downtime.editor">';
echo '<form method="post" class="display_in" action="'.$url_editor.'">';
html_print_submit_button(__('Create'), 'create', false, 'class="sub next"');
echo '</form>';
}
echo '</div>';
}
// Has downtimes.
else {
echo "<form method='post' action='index.php?sec=extensions&sec2=godmode/agentes/planned_downtime.list'>";
} else {
// Has downtimes.
echo '<form method="post" action="'.$url_list.'">';
html_print_table($table_form);
echo '</form>';
ui_pagination($downtimes_number, "index.php?sec=extensions&sec2=godmode/agentes/planned_downtime.list&$filter_params_str", $offset);
ui_pagination(
$downtimes_number,
$url_list.'&'.$filter_params_str,
$offset
);
// User groups with AR, AD or AW permission.
$groupsAD = users_get_groups($config['id_user'], $access);
@ -402,8 +614,11 @@ else {
$table->head['execution'] = __('Execution');
$table->head['configuration'] = __('Configuration');
$table->head['running'] = __('Running');
$table->head['agents_modules'] = __('Affected');
if ($write_permisson || $manage_permisson) {
if ($write_permisson === true
|| $manage_permisson === true
) {
$table->head['stop'] = __('Stop downtime');
$table->head['copy'] = __('Copy');
$table->head['edit'] = __('Edit');
@ -414,7 +629,9 @@ else {
$table->align['group'] = 'center';
$table->align['running'] = 'center';
if ($write_permisson || $manage_permisson) {
if ($write_permisson === true
|| $manage_permisson === true
) {
$table->align['stop'] = 'center';
$table->align['edit'] = 'center';
$table->align['delete'] = 'center';
@ -430,7 +647,7 @@ else {
WHERE id_downtime = '.$downtime['id']
);
$data['name'] = $downtime['name']." ($total)";
$data['name'] = $downtime['name'].' ('.$total.')';
$data['description'] = $downtime['description'];
$data['group'] = ui_print_group_icon($downtime['id_group'], true);
@ -451,7 +668,7 @@ else {
$data['configuration'] = reporting_format_planned_downtime_dates($downtime);
if ($downtime['executed'] == 0) {
if ((int) $downtime['executed'] === 0) {
$data['running'] = html_print_image(
'images/pixel_red.png',
true,
@ -473,44 +690,124 @@ else {
);
}
$settings = [
'url' => ui_get_full_url('ajax.php', false, false, false),
'loadingText' => __('Loading, this operation might take several minutes...'),
'title' => __('Agents / Modules affected'),
'id' => $downtime['id'],
];
$data['agents_modules'] = '<a href="#" onclick=\'dialogAgentModulesAffected('.json_encode($settings).')\'>';
$data['agents_modules'] .= html_print_image(
'images/search_big.png',
true,
[
'title' => __('Agents and modules affected'),
'style' => 'width:22px; height: 22px;',
]
);
$data['agents_modules'] .= '</a>';
// If user have writting permissions.
if (in_array($downtime['id_group'], $groupsAD)) {
// Stop button
if ($downtime['type_execution'] == 'once' && $downtime['executed'] == 1) {
if (check_acl_restricted_all($config['id_user'], $downtime['id_group'], 'AW')
|| check_acl_restricted_all($config['id_user'], $downtime['id_group'], 'AD')
if (in_array($downtime['id_group'], $groupsAD) === true) {
// Stop button.
if ($downtime['type_execution'] === 'once'
&& (int) $downtime['executed'] === 1
) {
if ((bool) check_acl_restricted_all($config['id_user'], $downtime['id_group'], 'AW') === true
|| (bool) check_acl_restricted_all($config['id_user'], $downtime['id_group'], 'AD') === true
) {
$data['stop'] = '<a href="index.php?sec=extensions&sec2=godmode/agentes/planned_downtime.list'.'&stop_downtime=1&id_downtime='.$downtime['id'].'&'.$filter_params_str.'">'.html_print_image('images/cancel.png', true, ['title' => __('Stop downtime')]);
$url_list_params = $url_list.'&stop_downtime=1&id_downtime='.$downtime['id'].'&'.$filter_params_str;
$data['stop'] = '<a href="'.$url_list_params.'">';
$data['stop'] .= html_print_image(
'images/cancel.png',
true,
['title' => __('Stop downtime')]
);
} else {
$data['stop'] = html_print_image('images/cancel.png', true, ['title' => __('Stop downtime')]);
$data['stop'] = html_print_image(
'images/cancel.png',
true,
['title' => __('Stop downtime')]
);
}
} else {
$data['stop'] = '';
}
// Edit & delete buttons.
if ($downtime['executed'] == 0) {
if (check_acl_restricted_all($config['id_user'], $downtime['id_group'], 'AW')
|| check_acl_restricted_all($config['id_user'], $downtime['id_group'], 'AD')
if ((int) $downtime['executed'] === 0) {
if ((bool) check_acl_restricted_all($config['id_user'], $downtime['id_group'], 'AW') === true
|| (bool) check_acl_restricted_all($config['id_user'], $downtime['id_group'], 'AD') === true
) {
// Copy.
$data['copy'] = '<a href="index.php?sec=extensions&sec2=godmode/agentes/planned_downtime.editor&downtime_copy=1&id_downtime='.$downtime['id'].'">'.html_print_image('images/copy.png', true, ['title' => __('Copy'), 'class' => 'invert_filter']).'</a>';
$data['copy'] = '<a href="'.$url_editor.'&downtime_copy=1&id_downtime='.$downtime['id'].'">';
$data['copy'] .= html_print_image(
'images/copy.png',
true,
[
'title' => __('Copy'),
'class' => 'invert_filter',
]
);
$data['copy'] .= '</a>';
// Edit.
$data['edit'] = '<a href="index.php?sec=extensions&sec2=godmode/agentes/planned_downtime.editor&edit_downtime=1&id_downtime='.$downtime['id'].'">'.html_print_image('images/config.png', true, ['title' => __('Update'), 'class' => 'invert_filter']).'</a>';
$data['edit'] = '<a href="'.$url_editor.'&edit_downtime=1&id_downtime='.$downtime['id'].'">';
$data['edit'] .= html_print_image(
'images/config.png',
true,
[
'title' => __('Update'),
'class' => 'invert_filter',
]
);
$data['edit'] .= '</a>';
// Delete.
$data['delete'] = '<a id="delete_downtime" href="index.php?sec=extensions&sec2=godmode/agentes/planned_downtime.list'.'&delete_downtime=1&id_downtime='.$downtime['id'].'&'.$filter_params_str.'">'.html_print_image('images/cross.png', true, ['title' => __('Delete'), 'class' => 'invert_filter']);
$url_delete = $url_list.'&delete_downtime=1&id_downtime='.$downtime['id'].'&'.$filter_params_str;
$data['delete'] = '<a id="delete_downtime" href="'.$url_delete.'">';
$data['delete'] .= html_print_image(
'images/cross.png',
true,
[
'title' => __('Delete'),
'class' => 'invert_filter',
]
);
$data['delete'] .= '</a>';
} else {
$data['edit'] = '';
$data['delete'] = '';
}
} else if ($downtime['executed'] == 1 && $downtime['type_execution'] == 'once') {
if (check_acl_restricted_all($config['id_user'], $downtime['id_group'], 'AW')
|| check_acl_restricted_all($config['id_user'], $downtime['id_group'], 'AD')
} else if ((int) $downtime['executed'] === 1
&& $downtime['type_execution'] === 'once'
) {
if ((bool) check_acl_restricted_all($config['id_user'], $downtime['id_group'], 'AW') === true
|| (bool) check_acl_restricted_all($config['id_user'], $downtime['id_group'], 'AD') === true
) {
// Copy.
$data['copy'] = '<a href="index.php?sec=extensions&sec2=godmode/agentes/planned_downtime.editor&downtime_copy=1&id_downtime='.$downtime['id'].'">'.html_print_image('images/copy.png', true, ['title' => __('Copy'), 'class' => 'invert_filter']).'</a>';
$data['copy'] = '<a href="'.$url_editor.'&downtime_copy=1&id_downtime='.$downtime['id'].'">';
$data['copy'] .= html_print_image(
'images/copy.png',
true,
[
'title' => __('Copy'),
'class' => 'invert_filter',
]
);
$data['copy'] .= '</a>';
// Edit.
$data['edit'] = '<a href="index.php?sec=extensions&sec2=godmode/agentes/planned_downtime.editor&edit_downtime=1&id_downtime='.$downtime['id'].'">'.html_print_image('images/config.png', true, ['title' => __('Update'), 'class' => 'invert_filter']).'</a>';
$data['edit'] = '<a href="'.$url_editor.'&edit_downtime=1&id_downtime='.$downtime['id'].'">';
$data['edit'] .= html_print_image(
'images/config.png',
true,
[
'title' => __('Update'),
'class' => 'invert_filter',
]
);
$data['edit'] .= '</a>';
// Delete.
$data['delete'] = __('N/A');
} else {
@ -529,7 +826,9 @@ else {
$data['delete'] = '';
}
if (!empty($malformed_downtimes_exist) && isset($malformed_downtimes[$downtime['id']])) {
if (empty($malformed_downtimes_exist) === false
&& isset($malformed_downtimes[$downtime['id']]) === true
) {
$next_row_num = count($table->data);
$table->cellstyle[$next_row_num][0] = 'color: red';
$table->cellstyle[$next_row_num][1] = 'color: red';
@ -542,7 +841,17 @@ else {
}
html_print_table($table);
ui_pagination($downtimes_number, "index.php?sec=extensions&sec2=godmode/agentes/planned_downtime.list&$filter_params_str", $offset, 0, false, 'offset', true, 'pagination-bottom');
ui_pagination(
$downtimes_number,
$url_list.'&'.$filter_params_str,
$offset,
0,
false,
'offset',
true,
'pagination-bottom'
);
echo '<div class="action-buttons" style="width: '.$table->width.'">';
// CSV export button.
@ -551,32 +860,44 @@ else {
__('Export to CSV'),
'csv_export',
false,
"location.href='godmode/agentes/planned_downtime.export_csv.php?$filter_params_str'",
'location.href="godmode/agentes/planned_downtime.export_csv.php?'.$filter_params_str.'"',
'class="sub next"'
);
echo '</div>';
// Create button.
if ($write_permisson) {
if ($write_permisson === true) {
echo '&nbsp;';
echo '<form method="post" action="index.php?sec=extensions&amp;sec2=godmode/agentes/planned_downtime.editor" class="display_in" >';
html_print_submit_button(__('Create'), 'create', false, 'class="sub next"');
echo '<form method="post" action="'.$url_editor.'" class="display_in" >';
html_print_submit_button(
__('Create'),
'create',
false,
'class="sub next"'
);
echo '</form>';
}
echo '</div>';
}
ui_require_jquery_file('ui.datepicker-'.get_user_language(), 'include/javascript/i18n/');
ui_require_jquery_file(
'ui.datepicker-'.get_user_language(),
'include/javascript/i18n/'
);
ui_require_javascript_file('pandora_planned_downtimes');
?>
<script language="javascript" type="text/javascript">
$("input[name=module_name_hidden]").val(<?php echo (int) $module_id; ?>);
$(document).ready (function () {
$("#text-date_from, #text-date_to").datepicker({dateFormat: "<?php echo DATE_FORMAT_JS; ?>"});
$.datepicker.setDefaults($.datepicker.regional[ "<?php echo get_user_language(); ?>"]);
$("#text-date_from, #text-date_to")
.datepicker({dateFormat: "<?php echo DATE_FORMAT_JS; ?>"});
$.datepicker
.setDefaults($.datepicker.regional[ "<?php echo get_user_language(); ?>"]);
$("a#delete_downtime").click(function (e) {
if (!confirm("<?php echo __('WARNING: If you delete this scheduled downtime, it will not be taken into account in future SLA reports'); ?>")) {

View File

@ -30,6 +30,7 @@ require_once $config['homedir'].'/include/functions_users.php';
$pure = get_parameter('pure', 0);
$table = new stdClass();
$table->id = 'add_alert_table';
$table->class = 'databox filters';
$table->width = '100%';

View File

@ -345,7 +345,7 @@ for ($i = 1; $i <= $config['max_macro_fields']; $i++) {
$field_values,
'',
55,
255,
1000,
true,
false,
false,

View File

@ -61,50 +61,7 @@ if (defined('LAST_STEP') === false) {
}
// Default events calendar.
$default_events_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',
],
],
];
$default_events_calendar = default_events_calendar($id, 'talert_templates');
if ($duplicate_template === true) {
$source_id = (int) get_parameter('source_id');
@ -370,7 +327,12 @@ function update_template($step)
$result = alerts_update_alert_template($id, $values);
} else if ($step == 2) {
$schedule = get_parameter('schedule');
$schedule = io_safe_output(get_parameter('schedule', []));
json_decode($schedule, true);
if (json_last_error() !== JSON_ERROR_NONE) {
return false;
}
$special_day = (int) get_parameter('special_day');
$threshold = (int) get_parameter('threshold');
$max_alerts = (int) get_parameter('max_alerts');
@ -389,12 +351,7 @@ function update_template($step)
}
$values = [
'schedule' => json_encode(
json_decode(
io_safe_output($schedule),
true
)
),
'schedule' => $schedule,
'special_day' => $special_day,
'time_threshold' => $threshold,
'id_alert_action' => $default_action,
@ -485,7 +442,6 @@ $type = '';
$value = '';
$max = '';
$min = '';
$schedule = json_encode(
$default_events_calendar
);
@ -614,7 +570,9 @@ if ($id && ! $create_template) {
$min = $template['min_value'];
$matches = $template['matches_value'];
$schedule = $template['schedule'];
$schedule = json_encode(
$default_events_calendar
);
$special_day = (int) $template['special_day'];
$max_alerts = $template['max_alerts'];
$min_alerts = $template['min_alerts'];

View File

@ -90,6 +90,8 @@ $data[1] = html_print_input_text(
'',
50,
255,
true,
false,
true
);
$data[1] .= html_print_input_hidden('id_response', $event_response['id'], true);

View File

@ -27,7 +27,7 @@ if (! check_acl($config['id_user'], 0, 'PM')) {
// Header
ui_print_page_header(__('Extensions').' &raquo; '.__('Defined extensions'), 'images/extensions.png', false, '', true, '');
if (sizeof($config['extensions']) == 0) {
if (count($config['extensions']) == 0) {
$extensions = extensions_get_extension_info();
if (empty($extensions)) {
echo '<h3>'.__('There are no extensions defined').'</h3>';

View File

@ -122,8 +122,7 @@ if ($table !== null) {
html_print_table($table);
}
unset($table);
$table = new stdClass();
$table->width = '100%';
$table->class = 'databox filters';
$table->data = [];

View File

@ -218,14 +218,9 @@ if ($update_agents) {
$old_interval_value = db_get_value_filter('intervalo', 'tagente', ['id_agente' => $id_agent]);
if (!empty($values)) {
$group_old = false;
$disabled_old = false;
if ($values['id_grupo'] || isset($values['disabled'])) {
$values_old = db_get_row_filter('tagente', ['id_agente' => $id_agent], ['id_grupo', 'disabled']);
if ($values_old['id_grupo']) {
$group_old = $values_old['id_grupo'];
}
if (isset($values['disabled'])) {
$disabled_old = $values_old['disabled'];
}
@ -274,74 +269,6 @@ if ($update_agents) {
alerts_validate_alert_agent($id_agent);
}
}
if ($group_old || $result) {
if ($group_old && $group_old != null) {
$tpolicy_group_old = db_get_all_rows_sql(
'SELECT id_policy FROM tpolicy_groups
WHERE id_group = '.$group_old
);
} else {
$tpolicy_group_old = db_get_all_rows_sql('SELECT id_policy FROM tpolicy_groups');
}
if ($tpolicy_group_old) {
foreach ($tpolicy_group_old as $key => $value) {
$tpolicy_agents_old = db_get_sql(
'SELECT * FROM tpolicy_agents
WHERE id_policy = '.$value['id_policy'].' AND id_agent = '.$id_agent
);
if ($tpolicy_agents_old) {
$result2 = db_process_sql_update(
'tpolicy_agents',
['pending_delete' => 1],
[
'id_agent' => $id_agent,
'id_policy' => $value['id_policy'],
]
);
}
}
}
if ($values['id_grupo'] && $values['id_grupo'] != null) {
$tpolicy_group_new = db_get_all_rows_sql(
'SELECT id_policy FROM tpolicy_groups
WHERE id_group = '.$values['id_grupo']
);
} else {
$tpolicy_group_new = db_get_all_rows_sql('SELECT id_policy FROM tpolicy_groups');
}
if ($tpolicy_group_new) {
foreach ($tpolicy_group_new as $key => $value) {
$tpolicy_agents_new = db_get_sql(
'SELECT * FROM tpolicy_agents
WHERE id_policy = '.$value['id_policy'].' AND id_agent ='.$id_agent
);
if (!$tpolicy_agents_new) {
db_process_sql_insert(
'tpolicy_agents',
[
'id_policy' => $value['id_policy'],
'id_agent' => $id_agent,
]
);
} else {
$result3 = db_process_sql_update(
'tpolicy_agents',
['pending_delete' => 0],
[
'id_agent' => $id_agent,
'id_policy' => $value['id_policy'],
]
);
}
}
}
}
}
$info = [];

View File

@ -731,8 +731,7 @@ if ($components === false) {
$components = [];
}
unset($table);
$table = new stdClass();
$table->width = '100%';
$table->head = [];
$table->class = 'info_table';

View File

@ -25,6 +25,7 @@ if (! check_acl($config['id_user'], 0, 'PM') && ! check_acl($config['id_user'],
return;
}
$table = new stdClass();
$table->id = 'network_component';
$table->width = '100%';
$table->class = 'databox';
@ -36,6 +37,7 @@ if (!enterprise_installed()) {
$table->colspan[0][1] = 3;
}
$table_simple = new stdClass();
$table_simple->colspan[7][1] = 4;
$table_simple->colspan[8][1] = 4;
$table_simple->colspan[9][1] = 4;

View File

@ -42,7 +42,7 @@ if (is_ajax() === true) {
$id_group = (int) get_parameter('id_group');
$filter = [];
$filter[] = '(nombre COLLATE utf8_general_ci LIKE "%'.$string.'%" OR direccion LIKE "%'.$string.'%" OR comentarios LIKE "%'.$string.'%")';
$filter[] = '(nombre LIKE "%'.$string.'%" OR direccion LIKE "%'.$string.'%" OR comentarios LIKE "%'.$string.'%")';
$filter['id_grupo'] = $id_group;
$agents = agents_get_agents($filter, ['nombre', 'direccion']);

View File

@ -41,7 +41,7 @@ if (is_ajax()) {
$id_group = (int) get_parameter('id_group');
$filter = [];
$filter[] = '(nombre COLLATE utf8_general_ci LIKE "%'.$string.'%" OR direccion LIKE "%'.$string.'%" OR comentarios LIKE "%'.$string.'%")';
$filter[] = '(nombre LIKE "%'.$string.'%" OR direccion LIKE "%'.$string.'%" OR comentarios LIKE "%'.$string.'%")';
$filter['id_grupo'] = $id_group;
$agents = agents_get_agents($filter, ['nombre', 'direccion']);

View File

@ -376,7 +376,7 @@ $table_aux = new stdClass();
false,
false,
'',
'class="check_deletemrgn_lft_2px"',
'class="check_delete mrgn_lft_2px"',
true
);
}

View File

@ -743,6 +743,7 @@ switch ($action) {
break;
case 'agent_module':
case 'agent_module_status':
$description = $item['description'];
$es = json_decode($item['external_source'], true);
@ -4744,6 +4745,7 @@ $(document).ready (function () {
switch (type){
case 'agent_module':
case 'agent_module_status':
case 'alert_report_actions':
var agents_multiple = $('#id_agents2').val();
var modules_multiple = $('#module').val();
@ -4878,6 +4880,7 @@ $(document).ready (function () {
}
switch (type){
case 'agent_module':
case 'agent_module_status':
case 'alert_report_actions':
var agents_multiple = $('#id_agents2').val();
var modules_multiple = $('#module').val();
@ -6345,9 +6348,10 @@ function chooseType() {
break;
case 'agent_module':
$("#row_module_group").show();
case 'agent_module_status':
$("#row_description").show();
$("#row_group").show();
$("#row_module_group").show();
$("#select_agent_modules").show();
$("#agents_modules_row").show();
$("#modules_row").show();

View File

@ -343,7 +343,7 @@ $countItems = db_get_sql(
FROM treport_content
WHERE '.$where.' AND id_report = '.$idReport
);
$table = null;
$table = new stdClass();
$table->style[0] = 'text-align: right;';
@ -594,7 +594,7 @@ foreach ($items as $item) {
if ($style['name_label'] != '') {
if (($style['name_label'] ?? null) != '') {
$text = empty($style['name_label']) ? $item['description'] : $style['name_label'];
} else {
if ($item['name'] == '' && $item['description'] == '') {
@ -604,11 +604,11 @@ foreach ($items as $item) {
}
}
// Apply macros
// Apply macros.
$items_macro['type'] = $item['type'];
$text = reporting_label_macro(
$items_macro,
$text
($text ?? '')
);
$row[5] = ui_print_truncate_text($text, 'description', true, true);

View File

@ -938,7 +938,7 @@ switch ($action) {
$table->head[$next] = __('Private');
$table->headstyle[$next] = 'min-width: 40px;text-align: left;';
$table->size[$next] = '2%';
if (defined('METACONSOLE')) {
if (is_metaconsole() === true) {
$table->align[$next] = '';
} else {
$table->align[$next] = 'left';
@ -952,7 +952,7 @@ switch ($action) {
$next++;
$op_column = false;
if (!defined('METACONSOLE')) {
if (is_metaconsole() === false) {
$op_column = true;
$table->head[$next] = '<span title="Operations">'.__('Op.').'</span>'.html_print_checkbox(
'all_delete',
@ -967,6 +967,8 @@ switch ($action) {
// $table->size = array ();
$table->size[$next] = '10%';
$table->align[$next] = 'right';
} else {
$table->size[1] = '40%';
}
$columnview = false;
@ -1266,7 +1268,7 @@ switch ($action) {
|| check_acl($config['id_user'], 0, 'RM')
) {
echo '<form method="post" action="index.php?sec=reporting&sec2=godmode/reporting/reporting_builder&tab=main&action=new&pure='.$pure.'">';
if (defined('METACONSOLE')) {
if (is_metaconsole() === true) {
echo '<div class="action-buttons w100p">';
} else {
echo '<div class="action-buttons w100p">';
@ -1653,6 +1655,7 @@ switch ($action) {
break;
case 'agent_module':
case 'agent_module_status':
$agents_to_report_text = get_parameter('id_agents2-multiple-text', '');
$modules_to_report_text = get_parameter('module-multiple-text', '');
@ -2454,6 +2457,7 @@ switch ($action) {
break;
case 'agent_module':
case 'agent_module_status':
$agents_to_report_text = get_parameter('id_agents2-multiple-text');
$modules_to_report_text = get_parameter('module-multiple-text', '');

View File

@ -68,7 +68,7 @@ if (is_ajax()) {
$modules = [];
}
$table = null;
$table = new stdClass();
$table->width = '100%';
$table->head[0] = __('Network Components');
$table->data = [];
@ -82,7 +82,7 @@ if (is_ajax()) {
echo '<br />';
}
$table = null;
$table = new stdClass();
$table->width = '100%';
$table->head[0] = __('Agent');
$table->head[1] = __('Module');

View File

@ -289,11 +289,16 @@ if (is_array($config) === true
&& (bool) $config['history_db_enabled'] === true
) {
ob_start();
$password = $config['history_db_pass'];
if (function_exists('io_output_password') === true) {
$password = io_output_password($config['history_db_pass']);
}
$dbhHistory = db_connect(
$config['history_db_host'],
$config['history_db_name'],
$config['history_db_user'],
io_output_password($config['history_db_pass']),
$password,
$config['history_db_port']
);
ob_get_clean();
@ -312,6 +317,11 @@ $insecure = false;
$pandora_url = ui_get_full_url('godmode/um_client', false, false, false);
if (is_array($config) === true) {
$allowOfflinePatches = false;
if (isset($config['allow_offline_patches']) === true) {
$allowOfflinePatches = (bool) $config['allow_offline_patches'];
}
if (isset($config['secure_update_manager']) === false) {
$config['secure_update_manager'] = null;
}
@ -425,6 +435,7 @@ $ui = new Manager(
'remote_config' => $remote_config,
'propagate_updates' => $is_metaconsole,
'proxy' => $proxy,
'allowOfflinePatches' => $allowOfflinePatches,
'set_maintenance_mode' => function () {
if (function_exists('config_update_value') === true) {
config_update_value('maintenance_mode', 1);

View File

@ -1582,7 +1582,10 @@ class Client
) {
// When PharData failes because of no space left on device
// a PHP Notice is received instead of a PharData\Exception.
throw new \Exception(error_get_last());
$err = error_get_last();
if ($err !== null) {
throw new \Exception($err['message']);
}
}
} catch (\Exception $e) {
error_reporting($er);

View File

@ -84,6 +84,13 @@ class Manager
*/
private $authCode;
/**
* Allow install offline packages not following current version.
*
* @var boolean
*/
private $allowOfflinePatches = false;
/**
* Undocumented function
@ -144,6 +151,10 @@ class Manager
$settings['offline'] = true;
}
if (isset($settings['allowOfflinePatches']) === true) {
$this->allowOfflinePatches = (bool) $settings['allowOfflinePatches'];
}
$this->umc = new Client($settings);
}
@ -228,18 +239,19 @@ class Manager
View::render(
'offline',
[
'version' => $this->umc->getVersion(),
'mr' => $this->umc->getMR(),
'error' => $this->umc->getLastError(),
'asset' => function ($rp) {
'version' => $this->umc->getVersion(),
'mr' => $this->umc->getMR(),
'error' => $this->umc->getLastError(),
'asset' => function ($rp) {
echo $this->getUrl($rp);
},
'authCode' => $this->authCode,
'ajax' => $this->ajaxUrl,
'ajaxPage' => $this->ajaxPage,
'progress' => $this->umc->getUpdateProgress(),
'running' => $this->umc->isRunning(),
'insecure' => $this->umc->isInsecure(),
'authCode' => $this->authCode,
'ajax' => $this->ajaxUrl,
'ajaxPage' => $this->ajaxPage,
'progress' => $this->umc->getUpdateProgress(),
'running' => $this->umc->isRunning(),
'insecure' => $this->umc->isInsecure(),
'allowOfflinePatches' => $this->allowOfflinePatches,
]
);
}

View File

@ -1,6 +1,7 @@
/* exported form_upload */
/* global $,ajax,cleanExit,preventExit,umConfirm,umErrorMsg */
/* global texts,ajaxPage,insecureMode */
/* global ImSureWhatImDoing */
/**
*
@ -204,7 +205,9 @@ function form_upload(url, auth, current_package) {
let number_update = res.version;
let server_update = res.server_update;
let current_version = parseFloat(current_package);
let target_version = Math.round(parseFloat(current_package)) + 1;
let target_patch = parseFloat(current_package) + 0.1;
if (number_update === null) {
umConfirm({
@ -221,7 +224,31 @@ function form_upload(url, auth, current_package) {
cancelUpdate();
}
});
} else if (Math.round(parseFloat(number_update)) != target_version) {
} else if (
parseFloat(number_update) != target_version &&
parseFloat(number_update) != target_patch &&
parseFloat(number_update) != current_version
) {
if (ImSureWhatImDoing == undefined || ImSureWhatImDoing == false) {
umConfirm({
message:
'<span class="warning"></span><p>' +
(server_update
? texts.notGoingToInstallUnoficialServerWarning
: texts.notGoingToInstallUnoficialWarning) +
"</p>",
title: texts.warning,
size: 535,
onAccept: function() {
location.reload();
},
onDeny: function() {
cancelUpdate();
}
});
return;
}
umConfirm({
message:
'<span class="warning"></span><p>' +

View File

@ -181,7 +181,7 @@ class ClientTest extends \PHPUnit\Framework\TestCase
{
// Load the conf.
try {
$this->conf = new \Config('client/conf/test.ini');
$this->conf = new \Config(__DIR__.'/../conf/test.ini');
} catch (\Exception $e) {
$this->fail($e->getMessage());
}

View File

@ -83,7 +83,9 @@
'fileList': "<?php echo __('Files included in this package'); ?>",
'ignoresign': "<?php echo __('Ignore'); ?>",
'verifysigntitle': "<?php echo __('Verify package signature'); ?>",
'verifysigns': "<?php echo __('Copy into the textarea the signature validation token you can retrieve from %s and press OK to verify the package, press ignore to avoid signature verification', 'https://support.pandorafms.com'); ?>"
'verifysigns': "<?php echo __('Copy into the textarea the signature validation token you can retrieve from %s and press OK to verify the package, press ignore to avoid signature verification', 'https://support.pandorafms.com'); ?>",
'notGoingToInstallUnoficialServerWarning': "<?php echo __('This server update does not correspond with current console version and is not going to be installed unless patches are allowed. Please enable patches in update manager settings.'); ?>",
'notGoingToInstallUnoficialWarning': "<?php echo __('This update does not correspond with next version of %s and is not going to be installed unless patches are allowed. Please enable patches in update manager settings.', get_product_name()); ?>",
}
var insecureMode = <?php echo ($insecure === true) ? 'true' : 'false'; ?>;
@ -96,4 +98,6 @@
);
}
var ImSureWhatImDoing = <?php echo (false === $allowOfflinePatches) ? 'false' : 'true'; ?>;
</script>

View File

@ -93,6 +93,10 @@ if (!$action_update_url_update_manager) {
'update_manager_proxy_password',
$config['update_manager_proxy_password']
);
$allow_offline_patches = get_parameter_switch(
'allow_offline_patches',
$config['allow_offline_patches']
);
if ($action_update_url_update_manager) {
$result = config_update_value(
@ -134,6 +138,13 @@ if (!$action_update_url_update_manager) {
);
}
if ($result) {
$result = config_update_value(
'allow_offline_patches',
$allow_offline_patches
);
}
if ($result && license_free()) {
$result = config_update_value(
'identification_reminder',
@ -154,6 +165,7 @@ if (!$action_update_url_update_manager) {
$update_manager_proxy_port = get_parameter('update_manager_proxy_port', '');
$update_manager_proxy_user = get_parameter('update_manager_proxy_user', '');
$update_manager_proxy_password = get_parameter('update_manager_proxy_password', '');
$allow_offline_patches = get_parameter_switch('allow_offline_patches', false);
if ($action_update_url_update_manager) {
@ -196,6 +208,13 @@ if (!$action_update_url_update_manager) {
);
}
if ($result) {
$result = config_update_value(
'allow_offline_patches',
$allow_offline_patches
);
}
if ($result && license_free()) {
$result = config_update_value('identification_reminder', $identification_reminder);
}
@ -288,33 +307,39 @@ $table->data[5][1] = html_print_input_password(
true
);
$table->data[6][0] = __('Allow no-consecutive patches:');
$table->data[6][1] = html_print_switch(
[
'name' => 'allow_offline_patches',
'value' => $allow_offline_patches,
'return' => true,
]
);
$table->data[6][0] = __('Registration ID:');
$table->data[6][1] = '<i>'.$config['pandora_uid'].'</i>';
$table->data[7][0] = __('Registration ID:');
$table->data[7][1] = '<i>'.$config['pandora_uid'].'</i>';
if (update_manager_verify_registration() === true && users_is_admin()) {
$table->data[7][0] = __('Cancel registration:');
$table->data[7][1] = '<a href="';
$table->data[8][0] = __('Cancel registration:');
$table->data[8][1] = '<a href="';
if ((bool) is_metaconsole() === true) {
$table->data[7][1] .= ui_get_full_url(
$table->data[8][1] .= ui_get_full_url(
'index.php?sec=advanced&sec2=advanced/metasetup&pure=0&tab=update_manager_setup&um_disconnect_console=1'
);
} else {
$table->data[7][1] .= ui_get_full_url(
$table->data[8][1] .= ui_get_full_url(
'index.php?sec=messages&sec2=godmode/update_manager/update_manager&tab=setup&um_disconnect_console=1'
);
}
$table->data[7][1] .= '" onclick="if(confirm(\'Are you sure?\')) {return true;} else { return false; }">'.__('Unregister').'</a>';
$table->data[8][1] .= '" onclick="if(confirm(\'Are you sure?\')) {return true;} else { return false; }">'.__('Unregister').'</a>';
}
if (license_free()) {
$config['identification_reminder'] = isset($config['identification_reminder']) ? $config['identification_reminder'] : 1;
$table->data[8][0] = __('Pandora FMS community reminder').ui_print_help_tip(__('Every 8 days, a message is displayed to admin users to remember to register this Pandora instance'), true);
$table->data[8][1] = __('Yes').'&nbsp;&nbsp;&nbsp;'.html_print_radio_button('identification_reminder', 1, '', $config['identification_reminder'], true).'&nbsp;&nbsp;';
$table->data[8][1] .= __('No').'&nbsp;&nbsp;&nbsp;'.html_print_radio_button('identification_reminder', 0, '', $config['identification_reminder'], true);
$table->data[9][0] = __('Pandora FMS community reminder').ui_print_help_tip(__('Every 8 days, a message is displayed to admin users to remember to register this Pandora instance'), true);
$table->data[9][1] = __('Yes').'&nbsp;&nbsp;&nbsp;'.html_print_radio_button('identification_reminder', 1, '', $config['identification_reminder'], true).'&nbsp;&nbsp;';
$table->data[9][1] .= __('No').'&nbsp;&nbsp;&nbsp;'.html_print_radio_button('identification_reminder', 0, '', $config['identification_reminder'], true);
}
html_print_input_hidden('action_update_url_update_manager', 1);

View File

@ -285,6 +285,7 @@ if ($new_user && $config['admin_can_add_user']) {
$user_info['language'] = 'default';
$user_info['timezone'] = '';
$user_info['not_login'] = false;
$user_info['local_user'] = false;
$user_info['strict_acl'] = false;
$user_info['session_time'] = 0;
$user_info['middlename'] = 0;
@ -370,6 +371,7 @@ if ($create_user) {
}
$values['not_login'] = (bool) get_parameter('not_login', false);
$values['local_user'] = (bool) get_parameter('local_user', false);
$values['middlename'] = get_parameter('middlename', 0);
$values['strict_acl'] = (bool) get_parameter('strict_acl', false);
$values['session_time'] = (int) get_parameter('session_time', 0);
@ -571,6 +573,7 @@ if ($update_user) {
}
$values['not_login'] = (bool) get_parameter('not_login', false);
$values['local_user'] = (bool) get_parameter('local_user', false);
$values['strict_acl'] = (bool) get_parameter('strict_acl', false);
$values['session_time'] = (int) get_parameter('session_time', 0);
@ -1212,6 +1215,18 @@ $not_login .= html_print_checkbox_switch(
true
).'</div>';
$local_user = '<div class="label_select_simple"><p class="edit_user_labels">'.__('Local user').'</p>';
$local_user .= ui_print_help_tip(
__('The user with local authentication enabled will always use local authentication.'),
true
);
$local_user .= html_print_checkbox_switch(
'local_user',
1,
$user_info['local_user'],
true
).'</div>';
$session_time = '<div class="label_select_simple"><p class="edit_user_labels">'.__('Session Time');
$session_time .= ui_print_help_tip(
__('This is defined in minutes, If you wish a permanent session should putting -1 in this field.'),
@ -1379,7 +1394,7 @@ if ($id != '' && !$is_err) {
echo '<div id="user_form">
<div class="user_edit_first_row">
<div class="edit_user_info white_box">'.$div_user_info.'</div>
<div class="edit_user_autorefresh white_box"><p class="bolder">Extra info</p>'.$email.$phone.$not_login.$session_time.'</div>
<div class="edit_user_autorefresh white_box"><p class="bolder">Extra info</p>'.$email.$phone.$not_login.$local_user.$session_time.'</div>
</div>
<div class="user_edit_second_row white_box">
<div class="edit_user_options">'.$language.$access_or_pagination.$skin.$home_screen.$default_event_filter.$double_authentication.'</div>

View File

@ -1254,7 +1254,7 @@ class DiscoveryTaskList extends HTML
*
* @param array $task Task.
*
* @return html code with summary.
* @return string HTML code. code with summary.
*/
private function progressTaskSummary($task)
{

View File

@ -144,7 +144,7 @@ if ($search_agents && (!is_metaconsole() || $force_local)) {
$filter_agents = $filter;
switch ($config['dbtype']) {
case 'mysql':
$filter_agents[] = '(UPPER(alias) NOT LIKE "%'.$string.'%" AND UPPER(nombre) COLLATE utf8_general_ci LIKE "%'.$string.'%")';
$filter_agents[] = '(UPPER(alias) NOT LIKE "%'.$string.'%" AND UPPER(nombre) LIKE "%'.$string.'%")';
break;
case 'postgresql':
@ -173,7 +173,7 @@ if ($search_agents && (!is_metaconsole() || $force_local)) {
$filter_address = $filter;
switch ($config['dbtype']) {
case 'mysql':
$filter_address[] = '(UPPER(alias) NOT LIKE "%'.$string.'%" AND UPPER(nombre) COLLATE utf8_general_ci NOT LIKE "%'.$string.'%" AND UPPER(direccion) LIKE "%'.$string.'%")';
$filter_address[] = '(UPPER(alias) NOT LIKE "%'.$string.'%" AND UPPER(nombre) NOT LIKE "%'.$string.'%" AND UPPER(direccion) LIKE "%'.$string.'%")';
break;
case 'postgresql':
@ -202,7 +202,7 @@ if ($search_agents && (!is_metaconsole() || $force_local)) {
$filter_description = $filter;
switch ($config['dbtype']) {
case 'mysql':
$filter_description[] = '(UPPER(alias) NOT LIKE "%'.$string.'%" AND UPPER(nombre) COLLATE utf8_general_ci NOT LIKE "%'.$string.'%" AND UPPER(direccion) NOT LIKE "%'.$string.'%" AND UPPER(comentarios) LIKE "%'.$string.'%")';
$filter_description[] = '(UPPER(alias) NOT LIKE "%'.$string.'%" AND UPPER(nombre) NOT LIKE "%'.$string.'%" AND UPPER(direccion) NOT LIKE "%'.$string.'%" AND UPPER(comentarios) LIKE "%'.$string.'%")';
break;
case 'postgresql':
@ -284,7 +284,7 @@ if ($search_agents && (!is_metaconsole() || $force_local)) {
if (empty($string) === false) {
// Get agents for only the alias.
$filter_alias = $filter;
$filter_alias[] = '(alias COLLATE utf8_general_ci LIKE "%'.$string.'%")';
$filter_alias[] = '(alias LIKE "%'.$string.'%")';
$agents = db_get_all_rows_filter(
'tmetaconsole_agent',
@ -307,7 +307,7 @@ if ($search_agents && (!is_metaconsole() || $force_local)) {
// Get agents for only the name.
$filter_agents = $filter;
$filter_agents[] = '(alias COLLATE utf8_general_ci NOT LIKE "%'.$string.'%" AND nombre COLLATE utf8_general_ci LIKE "%'.$string.'%")';
$filter_agents[] = '(alias NOT LIKE "%'.$string.'%" AND nombre LIKE "%'.$string.'%")';
$agents = db_get_all_rows_filter(
'tmetaconsole_agent',
@ -330,7 +330,7 @@ if ($search_agents && (!is_metaconsole() || $force_local)) {
// Get agents for only the address.
$filter_address = $filter;
$filter_address[] = '(alias COLLATE utf8_general_ci NOT LIKE "%'.$string.'%" AND nombre COLLATE utf8_general_ci NOT LIKE "%'.$string.'%" AND direccion LIKE "%'.$string.'%")';
$filter_address[] = '(alias NOT LIKE "%'.$string.'%" AND nombre NOT LIKE "%'.$string.'%" AND direccion LIKE "%'.$string.'%")';
$agents = db_get_all_rows_filter(
'tmetaconsole_agent',
@ -353,7 +353,7 @@ if ($search_agents && (!is_metaconsole() || $force_local)) {
// Get agents for only the description.
$filter_description = $filter;
$filter_description[] = '(alias COLLATE utf8_general_ci NOT LIKE "%'.$string.'%" AND nombre COLLATE utf8_general_ci NOT LIKE "%'.$string.'%" AND direccion NOT LIKE "%'.$string.'%" AND comentarios LIKE "%'.$string.'%")';
$filter_description[] = '(alias NOT LIKE "%'.$string.'%" AND nombre NOT LIKE "%'.$string.'%" AND direccion NOT LIKE "%'.$string.'%" AND comentarios LIKE "%'.$string.'%")';
$agents = db_get_all_rows_filter(
'tmetaconsole_agent',

View File

@ -82,8 +82,15 @@ function process_user_login($login, $pass, $api=false)
{
global $config;
// 0. Check first is user y set as local user.
$local_user = (bool) db_get_value_filter(
'local_user',
'tusuario',
['id_user' => $login]
);
// 1. Try remote.
if (strtolower($config['auth']) != 'mysql') {
if ($local_user !== true && strtolower($config['auth']) != 'mysql') {
$login_remote = process_user_login_remote(
$login,
io_safe_output($pass),
@ -97,6 +104,7 @@ function process_user_login($login, $pass, $api=false)
if ($login_remote === false
&& ($config['fallback_local_auth']
|| is_user_admin($login)
|| $local_user === true
|| strtolower($config['auth']) == 'mysql')
) {
return process_user_login_local($login, $pass, $api);
@ -1391,8 +1399,16 @@ function safe_output_accute($string)
}
function local_ldap_search($ldap_host, $ldap_port=389, $ldap_version=3, $dn, $access_attr, $ldap_admin_user, $ldap_admin_pass, $user)
{
function local_ldap_search(
$ldap_host,
$ldap_port=389,
$ldap_version=3,
$dn=null,
$access_attr=null,
$ldap_admin_user=null,
$ldap_admin_pass=null,
$user=null
) {
global $config;
$filter = '';

View File

@ -544,11 +544,6 @@ class AgentWizard extends HTML
// Get the servers.
$rows = get_proxy_servers();
// Check if satellite server has remote configuration enabled.
$satellite_remote = config_agents_has_remote_configuration(
$this->idAgent
);
// Generate a list with allowed servers.
if (isset($rows) === true && is_array($rows) === true) {
foreach ($rows as $row) {
@ -1386,8 +1381,26 @@ class AgentWizard extends HTML
$modulesActivated = $tmp;
}
foreach (array_keys($data) as $k) {
foreach ($modulesActivated as $key => $value) {
/*
* Before changing anything inside those loops take in mind, if you
* change the module definition at interface level, those are the
* values wich will be applied to final module.
*
* There is no 'parse first default then specific' or similar.
*
* $modulesActivated has the modules to be created with the information
* retrieved from those specific modules.
*
* Only inherites from 'default' if you made no changes on module
* definition (at javascript level before calling this function).
*/
foreach ($modulesActivated as $key => $value) {
foreach (array_keys($data) as $k) {
if (isset($data[$k]) === false || $data[$k] === '') {
continue;
}
$valueStr = preg_replace('/\//', '\/', $value);
if (empty(preg_match('/-'.$valueStr.'$/', $k)) === false
@ -1401,114 +1414,151 @@ class AgentWizard extends HTML
if ($data['wizard_section'] === 'snmp_interfaces_explorer') {
if (isset($data['module-active-'.$key]) === false
|| $data['module-active-'.$key] == 0
|| (bool) $data['module-active-'.$key] === false
) {
if (empty(preg_match('/module-name-set/', $k)) === false) {
if (preg_match('/module-name-set/', $k) > 0) {
$result[$value]['name'] = $data['module-default_name-'.$key];
} else if (empty(preg_match('/module-description-set/', $k)) === false) {
$result[$value]['description'] = $data['module-default_description-'.$key];
} else if (empty(preg_match('/module-value/', $k)) === false) {
$result[$value]['value'] = $data['module-value-'.$key];
} else if (empty(preg_match('/module-macros/', $k)) === false) {
$result[$value]['macros'] = $data['module-macros-'.$key];
continue;
} else if (empty(preg_match('/module-id_plugin/', $k)) === false) {
$result[$value]['id_plugin'] = $data['module-id_plugin-'.$key];
continue;
} else if (empty(preg_match('/module-id_modulo/', $k)) === false) {
$result[$value]['id_modulo'] = $data['module-id_modulo-'.$key];
continue;
} else if (empty(preg_match('/module-unit/', $k)) === false) {
$result[$value]['unit'] = $data['module-unit-'.$key];
continue;
} else if (empty(preg_match('/module-warning-min/', $k)) === false) {
$result[$value]['warningMin'] = $data['module-warning-min-0_0-0'];
continue;
} else if (empty(preg_match('/module-warning-max/', $k)) === false) {
$result[$value]['warningMax'] = $data['module-warning-max-0_0-0'];
continue;
} else if (empty(preg_match('/module-critical-min/', $k)) === false) {
$result[$value]['criticalMin'] = $data['module-critical-min-0_0-0'];
continue;
} else if (empty(preg_match('/module-critical-max/', $k)) === false) {
$result[$value]['criticalMax'] = $data['module-critical-max-0_0-0'];
continue;
} else if (empty(preg_match('/module-critical-inv/', $k)) === false) {
if (isset($data['module-critical-inv-0_0-0'])) {
$result[$value]['criticalInv'] = $data['module-critical-inv-0_0-0_sent'];
}
continue;
} else if (empty(preg_match('/module-warning-inv/', $k)) === false) {
if (isset($data['module-warning-inv-0_0-0'])) {
$result[$value]['warningInv'] = $data['module-warning-inv-0_0-0_sent'];
}
continue;
} else if (empty(preg_match('/module-warning-perc/', $k)) === false) {
if (isset($data['module-warning-perc-0_0-0'])) {
$result[$value]['warningPerc'] = $data['module-warning-perc-0_0-0_sent'];
}
continue;
} else if (empty(preg_match('/module-critical-perc/', $k)) === false) {
if (isset($data['module-critical-perc-0_0-0'])) {
$result[$value]['criticalPerc'] = $data['module-critical-perc-0_0-0_sent'];
}
continue;
}
preg_match('/^(.*).*?_(\d+)-+(\d+)$/', $k, $matches);
$k = $matches[1].'_'.$matches[2].'-'.$matches[3];
if (preg_match('/module-description-set/', $k) > 0) {
$result[$value]['description'] = $data['module-description-set-'.$key];
continue;
}
if (preg_match('/module-value/', $k) > 0) {
$result[$value]['value'] = $data['module-value-'.$key];
continue;
}
if (preg_match('/module-macros/', $k) > 0) {
$result[$value]['macros'] = $data['module-macros-'.$key];
continue;
}
if (preg_match('/module-id_plugin/', $k) > 0) {
$result[$value]['id_plugin'] = $data['module-id_plugin-'.$key];
continue;
}
if (preg_match('/module-id_modulo/', $k) > 0) {
$result[$value]['id_modulo'] = $data['module-id_modulo-'.$key];
continue;
}
if (preg_match('/module-unit/', $k) > 0) {
$result[$value]['unit'] = $data['module-unit-'.$key];
continue;
}
if (preg_match('/module-warning-min/', $k) > 0
&& '' !== $data['module-warning-min-'.$key]
) {
$result[$value]['warningMin'] = $data['module-warning-min-'.$key];
continue;
}
if (preg_match('/module-warning-max/', $k) > 0
&& '' !== $data['module-warning-max-'.$key]
) {
$result[$value]['warningMax'] = $data['module-warning-max-'.$key];
continue;
}
if (preg_match('/module-critical-min/', $k) > 0
&& '' !== $data['module-critical-min-'.$key]
) {
$result[$value]['criticalMin'] = $data['module-critical-min-'.$key];
continue;
}
if (preg_match('/module-critical-max/', $k) > 0
&& '' !== $data['module-critical-max-'.$key]
) {
$result[$value]['criticalMax'] = $data['module-critical-max-'.$key];
continue;
}
if (preg_match('/module-critical-inv/', $k) > 0
&& isset($data['module-critical-inv-'.$key]) === true
) {
$result[$value]['criticalInv'] = $data['module-critical-inv-'.$key.'_sent'];
continue;
}
if (preg_match('/module-warning-inv/', $k) > 0
&& isset($data['module-warning-inv-'.$key]) === true
) {
$result[$value]['warningInv'] = $data['module-warning-inv-'.$key.'_sent'];
continue;
}
if (preg_match('/module-warning-perc/', $k) > 0
&& isset($data['module-warning-perc-'.$key]) === true
) {
$result[$value]['warningPerc'] = $data['module-warning-perc-'.$key.'_sent'];
continue;
}
if (preg_match('/module-critical-perc/', $k) > 0
&& isset($data['module-critical-perc-'.$key]) === true
) {
$result[$value]['criticalPerc'] = $data['module-critical-perc-'.$key.'_sent'];
continue;
}
if (preg_match('/^(.*).*?_(\d+)-+(\d+)$/', $k, $matches) > 0) {
$k = $matches[1].'_'.$matches[2].'-'.$matches[3];
}
} else {
if (empty(preg_match('/module-value/', $k)) === false) {
if (preg_match('/module-value/', $k) > 0
&& empty($data[$k]) === false
) {
$result[$value]['value'] = $data[$k];
}
}
}
if (empty(preg_match('/-'.$valueStr.'_sent$/', $k)) === false) {
continue;
}
if (empty(preg_match('/module-warning-min/', $k)) === false) {
// Specific customization only if switch is active.
if (preg_match('/module-warning-min/', $k) > 0) {
$result[$value]['warningMin'] = $data[$k];
} else if (empty(preg_match('/module-warning-max/', $k)) === false) {
} else if (preg_match('/module-warning-max/', $k) > 0) {
$result[$value]['warningMax'] = $data[$k];
} else if (empty(preg_match('/module-critical-min/', $k)) === false) {
} else if (preg_match('/module-critical-min/', $k) > 0) {
$result[$value]['criticalMin'] = $data[$k];
} else if (empty(preg_match('/module-critical-max/', $k)) === false) {
} else if (preg_match('/module-critical-max/', $k) > 0) {
$result[$value]['criticalMax'] = $data[$k];
} else if (empty(preg_match('/module-critical-inv/', $k)) === false) {
} else if (preg_match('/module-critical-inv/', $k) > 0) {
$result[$value]['criticalInv'] = $data[$k.'_sent'];
} else if (empty(preg_match('/module-warning-inv/', $k)) === false) {
} else if (preg_match('/module-warning-inv/', $k) > 0) {
$result[$value]['warningInv'] = $data[$k.'_sent'];
} else if (empty(preg_match('/module-warning-perc/', $k)) === false) {
} else if (preg_match('/module-warning-perc/', $k) > 0) {
$result[$value]['warningPerc'] = $data[$k.'_sent'];
} else if (empty(preg_match('/module-critical-perc/', $k)) === false) {
} else if (preg_match('/module-critical-perc/', $k) > 0) {
$result[$value]['criticalPerc'] = $data[$k.'_sent'];
} else if (empty(preg_match('/module-type/', $k)) === false) {
} else if (preg_match('/module-type/', $k) > 0) {
$result[$value]['moduleType'] = $data[$k];
} else if (empty(preg_match('/module-unit/', $k)) === false) {
} else if (preg_match('/module-unit/', $k) > 0) {
$result[$value]['unit'] = $data[$k];
} else if (empty(preg_match('/module-scan_type/', $k)) === false) {
} else if (preg_match('/module-scan_type/', $k) > 0) {
$result[$value]['scan_type'] = (int) $data[$k];
} else if (empty(preg_match('/module-execution_type/', $k)) === false) {
} else if (preg_match('/module-execution_type/', $k) > 0) {
$result[$value]['execution_type'] = (int) $data[$k];
} else if (($data['wizard_section'] !== 'snmp_interfaces_explorer') && (empty(preg_match('/module-value/', $k)) === false)) {
} else if (($data['wizard_section'] !== 'snmp_interfaces_explorer')
&& preg_match('/module-value/', $k) > 0
) {
$result[$value]['value'] = $data[$k];
} else if (empty(preg_match('/module-macros/', $k)) === false) {
} else if (preg_match('/module-macros/', $k) > 0) {
$result[$value]['macros'] = $data[$k];
} else if (empty(preg_match('/module-name-oid/', $k)) === false) {
} else if (preg_match('/module-name-oid/', $k) > 0) {
$result[$value]['nameOid'] = $data[$k];
} else if (empty(preg_match('/module-query_class/', $k)) === false) {
} else if (preg_match('/module-query_class/', $k) > 0) {
$result[$value]['queryClass'] = $data[$k];
} else if (empty(preg_match('/module-query_key_field/', $k)) === false) {
} else if (preg_match('/module-query_key_field/', $k) > 0) {
$result[$value]['queryKeyField'] = $data[$k];
} else if (empty(preg_match('/module-scan_filters/', $k)) === false) {
} else if (preg_match('/module-scan_filters/', $k) > 0) {
$result[$value]['scanFilters'] = $data[$k];
} else if (empty(preg_match('/module-query_filters/', $k)) === false) {
} else if (preg_match('/module-query_filters/', $k) > 0) {
$result[$value]['queryFilters'] = $data[$k];
} else {
$result[$value][$k] = $data[$k];
@ -5971,19 +6021,19 @@ class AgentWizard extends HTML
if($(checkbox).prop('checked', true)) {
if(checkbox_name.match(/warning-inv/gm) !== null) {
$('#checkbox-module-warning-perc-'+uniqueId).prop('checked', false);
$('#checkbox-module-warning-perc-'+uniqueId.replace('/','\\/')).prop('checked', false);
}
if(checkbox_name.match(/critical-inv/gm) !== null) {
$('#checkbox-module-critical-perc-'+uniqueId).prop('checked', false);
$('#checkbox-module-critical-perc-'+uniqueId.replace('/','\\/')).prop('checked', false);
}
if(checkbox_name.match(/warning-perc/gm) !== null) {
$('#checkbox-module-warning-inv-'+uniqueId).prop('checked', false);
$('#checkbox-module-warning-inv-'+uniqueId.replace('/','\\/')).prop('checked', false);
}
if(checkbox_name.match(/critical-perc/gm) !== null) {
$('#checkbox-module-critical-inv-'+uniqueId).prop('checked', false);
$('#checkbox-module-critical-inv-'+uniqueId.replace('/','\\/')).prop('checked', false);
}
}

View File

@ -556,7 +556,7 @@ class ConsoleSupervisor
) {
// Process user targets.
$insertion_string = '';
$users_sql = 'INSERT INTO tnotification_user(id_mensaje,id_user)';
$users_sql = 'INSERT IGNORE INTO tnotification_user(id_mensaje,id_user)';
foreach ($this->targetUsers as $user) {
$insertion_string .= sprintf(
'(%d,"%s")',
@ -590,7 +590,7 @@ class ConsoleSupervisor
) {
// Process group targets.
$insertion_string = '';
$groups_sql = 'INSERT INTO tnotification_group(id_mensaje,id_group)';
$groups_sql = 'INSERT IGNORE INTO tnotification_group(id_mensaje,id_group)';
foreach ($this->targetGroups as $group) {
$insertion_string .= sprintf(
'(%d,"%s")',
@ -659,15 +659,17 @@ class ConsoleSupervisor
$_cache_targets = [];
}
if ($_cache_targets[$key] !== null) {
if (isset($_cache_targets[$key]) === true
&& $_cache_targets[$key] !== null
) {
$targets = $_cache_targets[$key];
} else {
$targets = get_notification_source_targets(
$source_id,
$data['type']
);
$this->targetGroups = $targets['groups'];
$this->targetUsers = $targets['users'];
$this->targetGroups = ($targets['groups'] ?? null);
$this->targetUsers = ($targets['users'] ?? null);
$_cache_targets[$key] = $targets;
}

View File

@ -158,7 +158,9 @@ class CredentialStore extends Wizard
// Check access.
check_login();
if (! check_acl($config['id_user'], 0, 'AR')) {
if ((bool) check_acl($config['id_user'], 0, 'PM') === false
|| (bool) check_acl($config['id_user'], 0, 'UM') === false
) {
db_pandora_audit(
AUDIT_LOG_ACL_VIOLATION,
'Trying to access credential store'
@ -453,7 +455,8 @@ class CredentialStore extends Wizard
$item['extra_2'] = io_output_password($item['extra_2']);
$carry[$item['identifier']] = $item['identifier'];
return $carry;
}
},
[]
);
return $return;

View File

@ -38,6 +38,8 @@ require_once $config['homedir'].'/godmode/wizards/Wizard.main.php';
class Diagnostics extends Wizard
{
const INNODB_FLUSH_LOG_AT_TRX_COMMIT = 2;
/**
* Ajax controller page.
*
@ -797,8 +799,8 @@ class Diagnostics extends Wizard
case 'innodb_flush_log_at_trx_commit':
$name = __('InnoDB flush log at trx-commit');
$value = $item['Value'];
$status = ($item['Value'] == 2) ? 1 : 0;
$message = __('Recommended Value').' 2';
$status = ((int) $item['Value'] === self::INNODB_FLUSH_LOG_AT_TRX_COMMIT) ? 1 : 0;
$message = __('Recommended Value %d', self::INNODB_FLUSH_LOG_AT_TRX_COMMIT);
break;
case 'innodb_lock_wait_timeout':

View File

@ -473,12 +473,13 @@ class HTML
bool $direct=false
) {
global $config;
$text_color = '';
if ($config['style'] === 'pandora_black' && !is_metaconsole()) {
$text_color = 'style="color: white"';
}
$output = '';
if ($input['hidden'] == 1) {
if (($input['hidden'] ?? null) == 1) {
$class = ' hidden';
} else {
$class = '';
@ -488,24 +489,24 @@ class HTML
$class = $input['class'].$class;
}
if (is_array($input['block_content']) === true) {
$direct = (bool) $input['direct'];
$toggle = (bool) $input['toggle'];
if (is_array(($input['block_content'] ?? null)) === true) {
$direct = (bool) ($input['direct'] ?? false);
$toggle = (bool) ($input['toggle'] ?? false);
if (isset($input['label']) === true) {
$output .= '<span '.$text_color.'>'.$input['label'].'</span>';
}
// Print independent block of inputs.
$output .= '<li id="li-'.$input['block_id'].'" class="'.$class.'">';
$output .= '<li id="li-'.($input['block_id'] ?? '').'" class="'.$class.'">';
if ($input['wrapper']) {
$output .= '<'.$input['wrapper'].' id="'.$input['block_id'].'" class="'.$class.'">';
if (isset($input['wrapper']) === true) {
$output .= '<'.$input['wrapper'].' id="'.($input['block_id'] ?? '').'" class="'.$class.'">';
}
if (!$direct) {
// Avoid encapsulation if input is direct => 1.
$output .= '<ul class="wizard '.$input['block_class'].'">';
$output .= '<ul class="wizard '.($input['block_class'] ?? '').'">';
}
$html = '';
@ -544,15 +545,16 @@ class HTML
$output .= '</ul>';
}
if ($input['wrapper']) {
if (isset($input['wrapper']) === true) {
$output .= '</'.$input['wrapper'].'>';
}
$output .= '</li>';
} else {
if ($input['arguments']['type'] != 'hidden'
&& $input['arguments']['type'] != 'hidden_extended'
&& $input['arguments']['type'] != 'datalist'
if (is_array(($input['arguments'] ?? false)) === true
&& ($input['arguments']['type'] ?? false) != 'hidden'
&& ($input['arguments']['type'] ?? false) != 'hidden_extended'
&& ($input['arguments']['type'] ?? false) != 'datalist'
) {
// Raw content for attach at the start of the input.
if (isset($input['surround_start']) === true) {
@ -560,7 +562,7 @@ class HTML
}
if (!$direct) {
$output .= '<li id="'.$input['id'].'" class="'.$class.'">';
$output .= '<li id="'.($input['id'] ?? '').'" class="'.$class.'">';
}
if (isset($input['label']) === true) {
@ -569,7 +571,7 @@ class HTML
$output .= self::printInput($input['arguments']);
// Allow dynamic content.
$output .= $input['extra'];
$output .= ($input['extra'] ?? '');
if (!$direct) {
$output .= '</li>';
}
@ -579,9 +581,9 @@ class HTML
$output .= $input['surround_end'];
}
} else {
$output .= self::printInput($input['arguments']);
$output .= self::printInput(($input['arguments'] ?? []));
// Allow dynamic content.
$output .= $input['extra'];
$output .= ($input['extra'] ?? '');
}
}
@ -773,13 +775,13 @@ class HTML
bool $return=false,
bool $print_white_box=false
) {
$form = $data['form'];
$inputs = $data['inputs'];
$rawInputs = $data['rawInputs'];
$js = $data['js'];
$rawjs = $data['js_block'];
$cb_function = $data['cb_function'];
$cb_args = $data['cb_args'];
$form = ($data['form'] ?? null);
$inputs = ($data['inputs'] ?? []);
$rawInputs = ($data['rawInputs'] ?? null);
$js = ($data['js'] ?? null);
$rawjs = ($data['js_block'] ?? null);
$cb_function = ($data['cb_function'] ?? null);
$cb_args = ($data['cb_args'] ?? null);
$output_head = '';
if (empty($data['pre-content']) === false) {
@ -831,7 +833,7 @@ class HTML
if (isset($cb_function) === true) {
call_user_func_array(
$cb_function,
(isset($cb_args) === true) ? $cb_args : []
array_values((isset($cb_args) === true) ? $cb_args : [])
);
}
} catch (Exception $e) {
@ -848,10 +850,12 @@ class HTML
$output .= '<ul class="wizard">';
foreach ($inputs as $input) {
if ($input['arguments']['type'] != 'submit') {
$output .= self::printBlock($input, true);
} else {
if (is_array(($input['arguments'] ?? null)) === true
&& $input['arguments']['type'] === 'submit'
) {
$output_submit .= self::printBlock($input, true);
} else {
$output .= self::printBlock($input, true);
}
}
@ -913,7 +917,7 @@ class HTML
if (isset($cb_function) === true) {
call_user_func_array(
$cb_function,
(isset($cb_args) === true) ? $cb_args : []
array_values((isset($cb_args) === true) ? $cb_args : [])
);
}
} catch (Exception $e) {
@ -1048,7 +1052,7 @@ class HTML
if (isset($cb_function) === true) {
call_user_func_array(
$cb_function,
(isset($cb_args) === true) ? $cb_args : []
array_values((isset($cb_args) === true) ? $cb_args : [])
);
}
} catch (Exception $e) {
@ -1062,7 +1066,7 @@ class HTML
if ($input['arguments']['type'] != 'submit') {
$output .= self::printBlockAsList($input, true);
} else {
$output_submit .= self::printBlockAsList($input, true);
$output_submit = self::printBlockAsList($input, true);
}
}

View File

@ -2435,6 +2435,13 @@ class NetworkMap
$this->map['height'] = $this->mapOptions['height'];
}
if (is_string($this->map['filter']) === true) {
$this->map['filter'] = json_decode($this->map['filter'], true);
if (json_last_error() !== JSON_ERROR_NONE) {
$this->map['filter'] = [];
}
}
$this->map['filter']['z_dash'] = $this->mapOptions['z_dash'];
if (is_array($graph) === true) {
@ -2639,11 +2646,10 @@ class NetworkMap
'MW'
);
$simulate = false;
if (isset($networkmap['__simulated']) === false) {
if ($this->widget) {
$networkmap['filter'] = $this->mapOptions;
} else {
} else if (is_string($networkmap['filter']) === true) {
$networkmap['filter'] = json_decode(
$networkmap['filter'],
true
@ -2656,7 +2662,6 @@ class NetworkMap
];
$holding_area_title = __('Holding Area');
} else {
$simulate = true;
$holding_area_title = '';
$networkmap['filter']['holding_area'] = [
0,
@ -2672,7 +2677,7 @@ class NetworkMap
html_print_input_hidden('product_name', get_product_name());
html_print_input_hidden('center_logo', ui_get_full_url(ui_get_logo_to_center_networkmap()));
$output .= '<script type="text/javascript">
$output = '<script type="text/javascript">
////////////////////////////////////////////////////////////////////
// VARS FROM THE DB
////////////////////////////////////////////////////////////////////

View File

@ -581,10 +581,12 @@ class Tree
}
protected function processModule(&$module, $server=false, $all_groups)
protected function processModule(&$module, $server, $all_groups)
{
global $config;
$server = ($server ?? false);
if (isset($module['children'])) {
foreach ($module['children'] as $i => $children) {
$this->processModule($module['children'][$i], $server, $all_groups);
@ -734,10 +736,10 @@ class Tree
// Info to be able to open the snapshot image new page.
$module['snapshot'] = ui_get_snapshot_link(
[
'id_module' => $module['id'],
'interval' => $module['current_interval'],
'module_name' => $module['name'],
'id_node' => $module['serverID'] ? $module['serverID'] : 0,
'id_module' => ($module['id'] ?? null),
'interval' => ($module['current_interval'] ?? null),
'module_name' => ($module['name'] ?? null),
'id_node' => ((isset($module['serverID']) === true) ? $module['serverID'] : 0),
],
true
);
@ -754,12 +756,13 @@ class Tree
}
$module_alerts = alerts_get_alerts_agent_module($module['id']);
$module_alert_triggered = false;
foreach ($module_alerts as $module_alert) {
if ($module_alert['times_fired'] > 0) {
$module_alert_triggered = true;
if (is_array($module_alerts) === true) {
foreach ($module_alerts as $module_alert) {
if ($module_alert['times_fired'] > 0) {
$module_alert_triggered = true;
}
}
}

View File

@ -262,7 +262,7 @@ class TreeGroup extends Tree
$groups = array_filter(
$groups,
function ($group) {
return !$group['have_parent'];
return !($group['have_parent'] ?? false);
}
);
// Propagate child counters to her parents.
@ -417,7 +417,7 @@ class TreeGroup extends Tree
$groups = array_filter(
$groups,
function ($group) {
return !$group['have_parent'];
return !($group['have_parent'] ?? false);
}
);
@ -489,6 +489,10 @@ class TreeGroup extends Tree
}
foreach ($groups[$id]['counters'] as $type => $value) {
if (isset($all_counters[$type]) === false) {
$all_counters[$type] = 0;
}
$all_counters[$type] += $value;
}
}

View File

@ -135,7 +135,7 @@ class TreeGroupEdition extends TreeGroup
$groups = array_filter(
$groups,
function ($group) {
return !$group['have_parent'];
return !($group['have_parent'] ?? false);
}
);

View File

@ -20,7 +20,7 @@
/**
* Pandora build version and version
*/
$build_version = 'PC220217';
$build_version = 'PC220310';
$pandora_version = 'v7.0NG.760';
// Do not overwrite default timezone set if defined.
@ -311,3 +311,15 @@ if (isset($_SESSION['meny_type']) === true && empty($_SESSION['menu_type']) ===
} else {
$config['menu_type'] = 'classic';
}
// Log.
if (isset($config['console_log_enabled']) === true
&& $config['console_log_enabled'] == 1
) {
ini_set('log_errors', true);
ini_set('error_log', $config['homedir'].'/log/console.log');
} else {
ini_set('log_errors', false);
ini_set('error_log', '');
}

View File

@ -1269,10 +1269,12 @@ function mysql_db_process_sql_delete($table, $where, $where_join='AND')
* @param string $sql
* @return mixed The row or false in error.
*/
function mysql_db_get_all_row_by_steps_sql($new=true, &$result, $sql=null)
function mysql_db_get_all_row_by_steps_sql($new, &$result, $sql=null)
{
global $config;
$new = ($new ?? true);
if ($config['mysqli'] === true) {
if ($new == true) {
$result = mysqli_query($config['dbconnection'], $sql);

View File

@ -1,3 +1,24 @@
.terminal-main {
font-family: monospace;
font-size: 10pt;
}
#ehorus-client-container {
font-family: 'lato';
}
.glyphicon {
position: relative;
top: 1px;
display: inline-block;
font-style: normal;
font-size: 14px;
font-weight: 400;
line-height: 1;
-webkit-font-smoothing: antialiased;
font-family: 'Glyphicons Halflings';
}
.btn:focus,
.btn:active:focus,
.btn.active:focus,

View File

@ -166,7 +166,7 @@ function safe_url_extraclean($string, $default_string='')
* @param string $searchHandler Pattern of files to match.
* @param boolean $return Whether to print or return the list.
*
* @return string he list of files if $return parameter is true.
* @return array the list of files if $return parameter is true.
*/
function list_files($directory, $stringSearch, $searchHandler, $return=false)
{
@ -515,6 +515,7 @@ function human_time_description_raw($seconds, $exactly=false, $units='large')
if ($exactly) {
$returnDate = '';
$seconds = (float) $seconds;
$years = floor($seconds / SECONDS_1YEAR);
@ -1545,7 +1546,10 @@ function enterprise_hook($function_name, $parameters=false)
return call_user_func($function_name);
}
return call_user_func_array($function_name, $parameters);
return call_user_func_array(
$function_name,
array_values(($parameters ?? []))
);
}
return ENTERPRISE_NOT_HOOK;

View File

@ -750,6 +750,7 @@ function agents_get_agents_selected($group)
'id_tmetaconsole_setup',
'id_agente',
'alias',
'server_name',
],
'AR',
[
@ -764,7 +765,7 @@ function agents_get_agents_selected($group)
$all = array_reduce(
$all,
function ($carry, $item) {
$carry[$item['id_tmetaconsole_setup'].'|'.$item['id_tagente']] = $item['alias'];
$carry[$item['id_tmetaconsole_setup'].'|'.$item['id_tagente']] = $item['server_name'].' &raquo; '.$item['alias'];
return $carry;
},
[]
@ -1239,26 +1240,31 @@ function agents_get_group_agents(
if (isset($search['string']) === true) {
$string = io_safe_input($search['string']);
$filter[] = "(nombre COLLATE utf8_general_ci LIKE '%$string%' OR direccion LIKE '%$string%')";
$filter[] = "(nombre LIKE '%$string%' OR direccion LIKE '%$string%')";
unset($search['string']);
}
if (isset($search['matchIds']) === true && is_array($search['matchIds']) === true) {
$filter[] = sprintf('id_agente IN (%s)', implode(', ', $search['matchIds']));
unset($search['matchIds']);
}
if (isset($search['name']) === true) {
$name = io_safe_input($search['name']);
$filter[] = "nombre COLLATE utf8_general_ci LIKE '$name'";
$filter[] = "nombre LIKE '$name'";
unset($search['name']);
}
if (isset($search['alias']) === true) {
$name = io_safe_input($search['alias']);
$filter[] = "alias COLLATE utf8_general_ci LIKE '$name'";
$filter[] = "alias LIKE '$name'";
unset($search['alias']);
}
if (isset($search['aliasRegex']) === true) {
$name = io_safe_input($search['aliasRegex']);
$filter[] = sprintf(
'alias COLLATE utf8_general_ci REGEXP "%s"',
'alias REGEXP "%s"',
$name
);
unset($search['aliasRegex']);
@ -1397,7 +1403,7 @@ function agents_get_group_agents(
$key = $row['id_agente'];
}
if ($row['id_server'] !== '') {
if (($row['id_server'] ?? '') !== '') {
if (is_metaconsole()) {
$server_name = db_get_row_filter(
'tmetaconsole_setup',
@ -1555,7 +1561,7 @@ function agents_get_modules(
// ----------------------------------------------------------
foreach ($list_filter as $item) {
$field = $item['field'];
$value = $item['value'];
$value = (string) $item['value'];
// Check <> operator
$operatorDistin = false;
@ -1719,16 +1725,12 @@ function agents_get_name($id_agent, $case='none')
case 'upper':
return mb_strtoupper($agent, 'UTF-8');
break;
case 'lower':
return mb_strtolower($agent, 'UTF-8');
break;
case 'none':
default:
return ($agent);
break;
}
}
@ -1815,23 +1817,37 @@ function agents_get_alias_array($array_ids)
/**
* Get alias of an agent (cached function).
*
* @param integer $id_agent Agent id.
* @param string $case Case (upper, lower, none).
* @param integer|array $id_agent Agent id or array or box, also a boat.
* @param string $case Case (upper, lower, none).
*
* @return string Alias of the given agent.
*/
function agents_get_alias($id_agent, $case='none')
function agents_get_alias($id_agent, string $case='none')
{
global $config;
// Prepare cache.
static $cache = [];
if (empty($case)) {
if (empty($case) === true) {
$case = 'none';
}
$agent_alias = '';
if (is_array($id_agent) === true) {
foreach ($id_agent as $agg) {
$agent_alias .= agents_get_alias($agg, $case);
}
return $agent_alias;
}
if (isset($cache[$case]) === false) {
$cache[$case] = [];
}
// Check cache.
if (!is_metaconsole()) {
if (isset($cache[$case][$id_agent])) {
if (is_metaconsole() === false) {
if (is_numeric($id_agent) === true && isset($cache[$case]) === true
&& isset($cache[$case][$id_agent]) === true
) {
return $cache[$case][$id_agent];
}
}
@ -1857,7 +1873,7 @@ function agents_get_alias($id_agent, $case='none')
break;
}
if (!is_metaconsole()) {
if (is_metaconsole() === false) {
$cache[$case][$id_agent] = $alias;
}
@ -3213,8 +3229,8 @@ function agents_get_network_interfaces($agents=false, $agents_filter=false)
$ni_by_agents = [];
foreach ($agents as $agent) {
$agent_id = (isset($agent['id_agente'])) ? $agent['id_agente'] : $agent;
$agent_group_id = $agent['id_grupo'];
$agent_name = $agent['alias'];
$agent_group_id = (isset($agent['id_grupo']) === true) ? $agent['id_grupo'] : '';
$agent_name = (isset($agent['alias']) === true) ? $agent['alias'] : '';
$agent_interfaces = [];
$accepted_module_types = [];
@ -4170,3 +4186,78 @@ function get_planned_downtime_agents_list($id_downtime, $filter_cond, $id_groups
return $agents;
}
/**
* Agent Module status and data
*
* @param integer $id_group Group
* @param array $agents Agents filter.
* @param array $modules Modules filter.
*
* @return array Result.
*/
function get_status_data_agent_modules($id_group, $agents=[], $modules=[])
{
$slq_filter_group = '';
if (empty($id_group) === false) {
$slq_filter_group = sprintf(
' AND tagente.id_grupo = %d',
$id_group
);
}
$slq_filter_agent = '';
if (empty($agents) === false) {
$slq_filter_agent = sprintf(
' AND tagente_modulo.id_agente IN (%s)',
implode(',', $agents)
);
}
$slq_filter_module = '';
if (empty($modules) === false) {
$slq_filter_module = sprintf(
' AND tagente_modulo.id_agente_modulo IN (%s)',
implode(',', $modules)
);
}
$sql = sprintf(
'SELECT tagente_modulo.id_agente_modulo as id_agent_module,
tagente_modulo.nombre as name_module,
tagente_modulo.unit as unit_module,
tagente_modulo.id_agente as id_agent,
tagente_estado.datos as data_module,
tagente_estado.timestamp as data_time_module,
tagente_estado.estado as status_module,
tagente.alias as name_agent,
tagente.id_grupo as id_group,
tgrupo.nombre as name_group
FROM tagente_modulo
INNER JOIN tagente_estado
ON tagente_modulo.id_agente_modulo = tagente_estado.id_agente_modulo
INNER JOIN tagente
ON tagente_modulo.id_agente = tagente.id_agente
LEFT JOIN tagent_secondary_group
ON tagente.id_agente = tagent_secondary_group.id_agent
INNER JOIN tgrupo
ON tagente.id_grupo = tgrupo.id_grupo
WHERE 1=1
%s
%s
%s
',
$slq_filter_group,
$slq_filter_agent,
$slq_filter_module
);
$res = db_get_all_rows_sql($sql);
if ($res === false) {
$res = [];
}
return $res;
}

View File

@ -3395,3 +3395,120 @@ function alerts_get_templates_name_array($array_ids)
return $result;
}
/**
* Default values events calendar templates.
*
* @param integer $id ID.
* @param string $table Name table.
*
* @return array Data Events.
*/
function default_events_calendar($id, $table)
{
$result = [
'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',
],
],
];
$days = [
'monday',
'tuesday',
'wednesday',
'thursday',
'friday',
'saturday',
'sunday',
];
// Check Exists.
if (empty($id) === false) {
$sql_default_alert = sprintf(
'SELECT `id`,
`name`,
`time_from`,
`time_to`,
`monday`,
`tuesday`,
`wednesday`,
`thursday`,
`friday`,
`saturday`,
`sunday`,
`schedule`
FROM %s
WHERE id = %d',
$table,
$id
);
$r = db_get_row_sql($sql_default_alert);
if ($r != false) {
// Check Exist schedule.
if (empty($r['schedule']) === false) {
$result = json_decode(io_safe_output($r['schedule']), true);
} else {
// Compatibility mode old.
$result = [];
foreach ($days as $day) {
if ((int) $r[$day] === 1) {
$start = $r['time_from'];
$to = $r['time_to'];
if ($r['time_from'] === $r['time_to']) {
$start = '00:00:00';
$to = '00:00:00';
}
$result[$day][0] = [
'start' => $start,
'end' => $to,
];
}
}
}
}
}
return $result;
}

View File

@ -1535,10 +1535,6 @@ function api_set_update_agent($id_agent, $thrash2, $other, $thrash3)
'disabled',
]
);
$tpolicy_group_old = db_get_all_rows_sql(
'SELECT id_policy FROM tpolicy_groups
WHERE id_group = '.$values_old['id_grupo']
);
$return = db_process_sql_update(
'tagente',
@ -1577,59 +1573,6 @@ function api_set_update_agent($id_agent, $thrash2, $other, $thrash3)
]
);
}
if ($tpolicy_group_old) {
foreach ($tpolicy_group_old as $key => $value) {
$tpolicy_agents_old = db_get_sql(
'SELECT * FROM tpolicy_agents
WHERE id_policy = '.$value['id_policy'].' AND id_agent = '.$id_agent
);
if ($tpolicy_agents_old) {
$result2 = db_process_sql_update(
'tpolicy_agents',
['pending_delete' => 1],
[
'id_agent' => $id_agent,
'id_policy' => $value['id_policy'],
]
);
}
}
}
$tpolicy_group = db_get_all_rows_sql(
'SELECT id_policy FROM tpolicy_groups
WHERE id_group = '.$idGroup
);
if ($tpolicy_group) {
foreach ($tpolicy_group as $key => $value) {
$tpolicy_agents = db_get_sql(
'SELECT * FROM tpolicy_agents
WHERE id_policy = '.$value['id_policy'].' AND id_agent ='.$id_agent
);
if (!$tpolicy_agents) {
db_process_sql_insert(
'tpolicy_agents',
[
'id_policy' => $value['id_policy'],
'id_agent' => $id_agent,
]
);
} else {
$result3 = db_process_sql_update(
'tpolicy_agents',
['pending_delete' => 0],
[
'id_agent' => $id_agent,
'id_policy' => $value['id_policy'],
]
);
}
}
}
}
returnData(
@ -1829,11 +1772,6 @@ function api_set_update_agent_field($id_agent, $use_agent_alias, $params)
]
);
$tpolicy_group_old = db_get_all_rows_sql(
'SELECT id_policy FROM tpolicy_groups
WHERE id_group = '.$values_old['id_grupo']
);
$return = db_process_sql_update(
'tagente',
$fields,
@ -1861,59 +1799,6 @@ function api_set_update_agent_field($id_agent, $use_agent_alias, $params)
]
);
}
if ($tpolicy_group_old) {
foreach ($tpolicy_group_old as $key => $value) {
$tpolicy_agents_old = db_get_sql(
'SELECT * FROM tpolicy_agents
WHERE id_policy = '.$value['id_policy'].' AND id_agent = '.$agent
);
if ($tpolicy_agents_old) {
$result2 = db_process_sql_update(
'tpolicy_agents',
['pending_delete' => 1],
[
'id_agent' => $agent,
'id_policy' => $value['id_policy'],
]
);
}
}
}
$tpolicy_group = db_get_all_rows_sql(
'SELECT id_policy FROM tpolicy_groups
WHERE id_group = '.$field['id_grupo']
);
if ($tpolicy_group) {
foreach ($tpolicy_group as $key => $value) {
$tpolicy_agents = db_get_sql(
'SELECT * FROM tpolicy_agents
WHERE id_policy = '.$value['id_policy'].' AND id_agent ='.$agent
);
if (!$tpolicy_agents) {
db_process_sql_insert(
'tpolicy_agents',
[
'id_policy' => $value['id_policy'],
'id_agent' => $agent,
]
);
} else {
$result3 = db_process_sql_update(
'tpolicy_agents',
['pending_delete' => 0],
[
'id_agent' => $agent,
'id_policy' => $value['id_policy'],
]
);
}
}
}
}
}
@ -2066,23 +1951,6 @@ function api_set_new_agent($thrash1, $thrash2, $other, $thrash3)
agents_add_address($id_agente, $direccion_agente);
}
$tpolicy_group_old = db_get_all_rows_sql(
'SELECT id_policy FROM tpolicy_groups
WHERE id_group = '.$grupo
);
if ($tpolicy_group_old) {
foreach ($tpolicy_group_old as $key => $old_group) {
db_process_sql_insert(
'tpolicy_agents',
[
'id_policy' => $old_group['id_policy'],
'id_agent' => $id_agente,
]
);
}
}
$info = '{"Name":"'.$nombre_agente.'",
"IP":"'.$direccion_agente.'",
"Group":"'.$grupo.'",
@ -12365,27 +12233,27 @@ function api_set_update_user_profile_info($id_profile, $thrash1, $other, $return
}
$values = [
'name' => $other['data'][0] == '' ? $profile['name'] : (string) $other['data'][0],
'agent_view' => $other['data'][1] == '' ? $profile['agent_view'] : (bool) $other['data'][1] ? 1 : 0,
'agent_edit' => $other['data'][2] == '' ? $profile['agent_edit'] : (bool) $other['data'][2] ? 1 : 0,
'agent_disable' => $other['data'][3] == '' ? $profile['agent_disable'] : (bool) $other['data'][3] ? 1 : 0,
'alert_edit' => $other['data'][4] == '' ? $profile['alert_edit'] : (bool) $other['data'][4] ? 1 : 0,
'alert_management' => $other['data'][5] == '' ? $profile['alert_management'] : (bool) $other['data'][5] ? 1 : 0,
'user_management' => $other['data'][6] == '' ? $profile['user_management'] : (bool) $other['data'][6] ? 1 : 0,
'db_management' => $other['data'][7] == '' ? $profile['db_management'] : (bool) $other['data'][7] ? 1 : 0,
'event_view' => $other['data'][8] == '' ? $profile['event_view'] : (bool) $other['data'][8] ? 1 : 0,
'event_edit' => $other['data'][9] == '' ? $profile['event_edit'] : (bool) $other['data'][9] ? 1 : 0,
'event_management' => $other['data'][10] == '' ? $profile['event_management'] : (bool) $other['data'][10] ? 1 : 0,
'report_view' => $other['data'][11] == '' ? $profile['report_view'] : (bool) $other['data'][11] ? 1 : 0,
'report_edit' => $other['data'][12] == '' ? $profile['report_edit'] : (bool) $other['data'][12] ? 1 : 0,
'report_management' => $other['data'][13] == '' ? $profile['report_management'] : (bool) $other['data'][13] ? 1 : 0,
'map_view' => $other['data'][14] == '' ? $profile['map_view'] : (bool) $other['data'][14] ? 1 : 0,
'map_edit' => $other['data'][15] == '' ? $profile['map_edit'] : (bool) $other['data'][15] ? 1 : 0,
'map_management' => $other['data'][16] == '' ? $profile['map_management'] : (bool) $other['data'][16] ? 1 : 0,
'vconsole_view' => $other['data'][17] == '' ? $profile['vconsole_view'] : (bool) $other['data'][17] ? 1 : 0,
'vconsole_edit' => $other['data'][18] == '' ? $profile['vconsole_edit'] : (bool) $other['data'][18] ? 1 : 0,
'vconsole_management' => $other['data'][19] == '' ? $profile['vconsole_management'] : (bool) $other['data'][19] ? 1 : 0,
'pandora_management' => $other['data'][20] == '' ? $profile['pandora_management'] : (bool) $other['data'][20] ? 1 : 0,
'name' => ($other['data'][0] == '') ? $profile['name'] : (string) $other['data'][0],
'agent_view' => ($other['data'][1] == '') ? $profile['agent_view'] : ((bool) $other['data'][1] ? 1 : 0),
'agent_edit' => ($other['data'][2] == '') ? $profile['agent_edit'] : ((bool) $other['data'][2] ? 1 : 0),
'agent_disable' => ($other['data'][3] == '') ? $profile['agent_disable'] : ((bool) $other['data'][3] ? 1 : 0),
'alert_edit' => ($other['data'][4] == '') ? $profile['alert_edit'] : ((bool) $other['data'][4] ? 1 : 0),
'alert_management' => ($other['data'][5] == '') ? $profile['alert_management'] : ((bool) $other['data'][5] ? 1 : 0),
'user_management' => ($other['data'][6] == '') ? $profile['user_management'] : ((bool) $other['data'][6] ? 1 : 0),
'db_management' => ($other['data'][7] == '') ? $profile['db_management'] : ((bool) $other['data'][7] ? 1 : 0),
'event_view' => ($other['data'][8] == '') ? $profile['event_view'] : ((bool) $other['data'][8] ? 1 : 0),
'event_edit' => ($other['data'][9] == '') ? $profile['event_edit'] : ((bool) $other['data'][9] ? 1 : 0),
'event_management' => ($other['data'][10] == '') ? $profile['event_management'] : ((bool) $other['data'][10] ? 1 : 0),
'report_view' => ($other['data'][11] == '') ? $profile['report_view'] : ((bool) $other['data'][11] ? 1 : 0),
'report_edit' => ($other['data'][12] == '') ? $profile['report_edit'] : ((bool) $other['data'][12] ? 1 : 0),
'report_management' => ($other['data'][13] == '') ? $profile['report_management'] : ((bool) $other['data'][13] ? 1 : 0),
'map_view' => ($other['data'][14] == '') ? $profile['map_view'] : ((bool) $other['data'][14] ? 1 : 0),
'map_edit' => ($other['data'][15] == '') ? $profile['map_edit'] : ((bool) $other['data'][15] ? 1 : 0),
'map_management' => ($other['data'][16] == '') ? $profile['map_management'] : ((bool) $other['data'][16] ? 1 : 0),
'vconsole_view' => ($other['data'][17] == '') ? $profile['vconsole_view'] : ((bool) $other['data'][17] ? 1 : 0),
'vconsole_edit' => ($other['data'][18] == '') ? $profile['vconsole_edit'] : ((bool) $other['data'][18] ? 1 : 0),
'vconsole_management' => ($other['data'][19] == '') ? $profile['vconsole_management'] : ((bool) $other['data'][19] ? 1 : 0),
'pandora_management' => ($other['data'][20] == '') ? $profile['pandora_management'] : ((bool) $other['data'][20] ? 1 : 0),
];
$return = db_process_sql_update('tperfil', $values, ['id_perfil' => $id_profile]);
@ -16813,7 +16681,7 @@ function api_get_traps($thrash1, $thrash2, $other, $returnType)
$sql .= ' and status = 0';
}
if (sizeof($other['data']) == 0) {
if (count($other['data']) == 0) {
$sql = 'SELECT * from ttrap';
}

View File

@ -3354,8 +3354,8 @@ function get_um_url()
*/
function config_return_in_bytes($val)
{
$val = (int) trim($val);
$last = strtolower($val[(strlen($val) - 1)]);
$val = (int) trim($val);
switch ($last) {
// The 'G' modifier is available since PHP 5.1.0.
case 'g':

View File

@ -1164,10 +1164,12 @@ function db_get_all_rows_filter($table, $filter=[], $fields=false, $where_join='
* @param string $sql
* @return mixed The row or false in error.
*/
function db_get_all_row_by_steps_sql($new=true, &$result, $sql=null)
function db_get_all_row_by_steps_sql($new, &$result, $sql=null)
{
global $config;
$new = ($new ?? true);
switch ($config['dbtype']) {
case 'mysql':
return mysql_db_get_all_row_by_steps_sql($new, $result, $sql);

View File

@ -3022,7 +3022,8 @@ function events_get_group_events_steps(
* @param boolean $id_server Id_server.
* @param boolean $filter_event_filter_exclude Filter_event_filter_exclude.
*
* @return array An array with all the events happened.
* @return array|false An array with all the events happened. False if something
* failed.
*/
function events_get_agent(
$id_agent,

View File

@ -32,7 +32,10 @@ function extensions_call_main_function($filename)
$extension = &$config['extensions'][$filename];
if ($extension['main_function'] != '') {
$params = [];
call_user_func_array($extension['main_function'], $params);
call_user_func_array(
$extension['main_function'],
array_values(($params ?? []))
);
}
}
@ -49,7 +52,10 @@ function extensions_call_godmode_function($filename)
$extension = &$config['extensions'][$filename];
if ($extension['godmode_function'] != '') {
$params = [];
call_user_func_array($extension['godmode_function'], $params);
call_user_func_array(
$extension['godmode_function'],
array_values(($params ?? []))
);
}
}
@ -67,7 +73,10 @@ function extensions_call_login_function()
continue;
}
call_user_func_array($extension['login_function'], $params);
call_user_func_array(
$extension['login_function'],
array_values(($params ?? []))
);
}
}

View File

@ -33,7 +33,7 @@
function forecast_projection_graph(
$module_id,
$period=SECONDS_2MONTHS,
$prediction_period,
$prediction_period=false,
$max_value=false,
$min_value=false,
$csv=false,

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