Merge remote-tracking branch 'origin/develop' into ent-7844-revision-acl-enterprise-parte-3-fallos-actuales

This commit is contained in:
Calvo 2021-11-24 13:42:48 +01:00
commit d7f590bacb
112 changed files with 3891 additions and 1234 deletions

View File

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

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents
# Version 7.0NG.758, FreeBSD Version
# Version 7.0NG.758.1, FreeBSD Version
# Licensed under GPL license v2,
# Copyright (c) 2003-2021 Artica Soluciones Tecnologicas
# http://www.pandorafms.com

View File

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

View File

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

View File

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

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents
# Version 7.0NG.758, Solaris Version
# Version 7.0NG.758.1, Solaris Version
# Licensed under GPL license v2,
# Copyright (c) 2003-2021 Artica Soluciones Tecnologicas
# http://www.pandorafms.com

View File

@ -1,6 +1,6 @@
# Base config file for Pandora FMS Windows Agent
# (c) 2006-2021 Artica Soluciones Tecnologicas
# Version 7.0NG.758
# Version 7.0NG.758.1
# This program is Free Software, you can redistribute it and/or modify it
# under the terms of the GNU General Public Licence as published by the Free Software
# Foundation; either version 2 of the Licence or any later version

View File

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

View File

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

View File

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

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents
# Version 7.0NG.758
# Version 7.0NG.758.1
# Licensed under GPL license v2,
# (c) 2003-2021 Artica Soluciones Tecnologicas
# please visit http://pandora.sourceforge.net

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents
# Version 7.0NG.758
# Version 7.0NG.758.1
# Licensed under GPL license v2,
# (c) 2003-2021 Artica Soluciones Tecnologicas
# please visit http://pandora.sourceforge.net

View File

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

View File

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

View File

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

View File

@ -1,5 +1,5 @@
package: pandorafms-agent-unix
Version: 7.0NG.758-211115
Version: 7.0NG.758.1-211124
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.758-211115"
pandora_version="7.0NG.758.1-211124"
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

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

View File

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

View File

@ -5,9 +5,9 @@
<key>CFBundleIconFile</key> <string>pandorafms.icns</string>
<key>CFBundleIdentifier</key> <string>com.pandorafms.pandorafms_uninstall</string>
<key>CFBundleVersion</key> <string>7.0NG.758</string>
<key>CFBundleGetInfoString</key> <string>7.0NG.758 Pandora FMS Agent uninstaller for MacOS by Artica ST on Aug 2020</string>
<key>CFBundleShortVersionString</key> <string>7.0NG.758</string>
<key>CFBundleVersion</key> <string>7.0NG.758.1</string>
<key>CFBundleGetInfoString</key> <string>7.0NG.758.1 Pandora FMS Agent uninstaller for MacOS by Artica ST on Aug 2020</string>
<key>CFBundleShortVersionString</key> <string>7.0NG.758.1</string>
<key>NSPrincipalClass</key><string>NSApplication</string>
<key>NSMainNibFile</key><string>MainMenu</string>

View File

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

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents
# Version 7.0NG.758, FreeBSD Version
# Version 7.0NG.758.1, FreeBSD Version
# Licensed under GPL license v2,
# Copyright (c) 2003-2021 Artica Soluciones Tecnologicas
# http://www.pandorafms.com

View File

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

View File

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

View File

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

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents
# Version 7.0NG.758, NetBSD Version
# Version 7.0NG.758.1, NetBSD Version
# Licensed under GPL license v2,
# Copyright (c) 2003-2021 Artica Soluciones Tecnologicas
# http://www.pandorafms.com

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents
# Version 7.0NG.758, Solaris Version
# Version 7.0NG.758.1, Solaris Version
# Licensed under GPL license v2,
# Copyright (c) 2003-2021 Artica Soluciones Tecnologicas
# http://www.pandorafms.com

View File

@ -1014,8 +1014,8 @@ my $Sem = undef;
# Semaphore used to control the number of threads
my $ThreadSem = undef;
use constant AGENT_VERSION => '7.0NG.758';
use constant AGENT_BUILD => '211115';
use constant AGENT_VERSION => '7.0NG.758.1';
use constant AGENT_BUILD => '211124';
# Agent log default file size maximum and instances
use constant DEFAULT_MAX_LOG_SIZE => 600000;

View File

@ -2,8 +2,8 @@
#Pandora FMS Linux Agent
#
%define name pandorafms_agent_unix
%define version 7.0NG.758
%define release 211115
%define version 7.0NG.758.1
%define release 211124
Summary: Pandora FMS Linux agent, PERL version
Name: %{name}

View File

@ -2,8 +2,8 @@
#Pandora FMS Linux Agent
#
%define name pandorafms_agent_unix
%define version 7.0NG.758
%define release 211115
%define version 7.0NG.758.1
%define release 211124
Summary: Pandora FMS Linux agent, PERL version
Name: %{name}

View File

@ -9,8 +9,8 @@
# Please see http://www.pandorafms.org. This code is licensed under GPL 2.0 license.
# **********************************************************************
PI_VERSION="7.0NG.758"
PI_BUILD="211115"
PI_VERSION="7.0NG.758.1"
PI_BUILD="211124"
OS_NAME=`uname -s`
FORCE=0

View File

@ -1,6 +1,6 @@
# Base config file for Pandora FMS Windows Agent
# (c) 2006-2021 Artica Soluciones Tecnologicas
# Version 7.0NG.758
# Version 7.0NG.758.1
# This program is Free Software, you can redistribute it and/or modify it
# under the terms of the GNU General Public Licence as published by the Free Software
# Foundation; either version 2 of the Licence or any later version

View File

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

View File

@ -30,7 +30,7 @@ using namespace Pandora;
using namespace Pandora_Strutils;
#define PATH_SIZE _MAX_PATH+1
#define PANDORA_VERSION ("7.0NG.758 Build 211115")
#define PANDORA_VERSION ("7.0NG.758.1 Build 211124")
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.758(Build 211115))"
VALUE "ProductVersion", "(7.0NG.758.1(Build 211124))"
VALUE "FileVersion", "1.0.0.0"
END
END

View File

@ -1,5 +1,5 @@
package: pandorafms-console
Version: 7.0NG.758-211115
Version: 7.0NG.758.1-211124
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.758-211115"
pandora_version="7.0NG.758.1-211124"
package_pear=0
package_pandora=1

View File

@ -351,7 +351,7 @@ function mainModuleGroups()
}
$data[$i][$j] = "<div style='".$cell_style.'background:'.$color.";'>";
$data[$i][$j] .= '<a class="info_cell white font_18px" rel="'.$rel.'" href="'.$url.'">';
$data[$i][$j] .= "<a class='info_cell white font_18px' rel='".$rel."' href='".$url."'>";
$data[$i][$j] .= $array_data[$key][$k]['total_count'];
$data[$i][$j] .= '</a></div>';
} else {

View File

@ -113,4 +113,5 @@ enterprise/include/javascript/SimpleMapController.js
enterprise/include/javascript/tooltipster.bundle.min.js
enterprise/include/styles/tooltipster.bundle.min.css
mobile/include/javascript/jquery.mobile-1.3.1.js
mobile/include/style/jquery.mobile-1.3.1.css
mobile/include/style/jquery.mobile-1.3.1.css
godmode/alerts/configure_alert_special_days.php

View File

@ -0,0 +1,32 @@
START TRANSACTION;
ALTER TABLE tagente_modulo MODIFY debug_content TEXT;
CREATE TABLE IF NOT EXISTS `talert_calendar` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL default '',
`id_group` INT(10) NOT NULL DEFAULT 0,
`description` text,
PRIMARY KEY (`id`),
UNIQUE (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT IGNORE INTO `talert_calendar` VALUES (1, 'Default', 0, 'Default calendar');
ALTER TABLE `talert_special_days` ADD COLUMN `id_calendar` int(10) unsigned NOT NULL DEFAULT 1;
ALTER TABLE `talert_special_days` ADD COLUMN `day_code` tinyint(2) unsigned NOT NULL DEFAULT 0;
UPDATE `talert_special_days` set `day_code` = 1 WHERE `same_day` = 'monday';
UPDATE `talert_special_days` set `day_code` = 2 WHERE `same_day` = 'tuesday';
UPDATE `talert_special_days` set `day_code` = 3 WHERE `same_day` = 'wednesday';
UPDATE `talert_special_days` set `day_code` = 4 WHERE `same_day` = 'thursday';
UPDATE `talert_special_days` set `day_code` = 5 WHERE `same_day` = 'friday';
UPDATE `talert_special_days` set `day_code` = 6 WHERE `same_day` = 'saturday';
UPDATE `talert_special_days` set `day_code` = 7 WHERE `same_day` = 'sunday';
ALTER TABLE `talert_special_days` DROP COLUMN `same_day`;
ALTER TABLE `talert_special_days` ADD FOREIGN KEY (`id_calendar`) REFERENCES `talert_calendar`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `tagent_repository` ADD COLUMN `deployment_timeout` INT UNSIGNED DEFAULT 600 AFTER `path`;
COMMIT;

View File

@ -1565,7 +1565,7 @@ ALTER TABLE `tagente_modulo` DROP COLUMN `ff_normal`,
MODIFY COLUMN `dynamic_next` bigint(20) NOT NULL DEFAULT '0',
MODIFY COLUMN `dynamic_two_tailed` tinyint(1) unsigned NULL DEFAULT '0';
ALTER TABLE tagente_modulo MODIFY COLUMN `custom_string_1` MEDIUMTEXT;
ALTER TABLE `tagente_modulo` ADD COLUMN `debug_content` varchar(200);
ALTER TABLE `tagente_modulo` ADD COLUMN `debug_content` TEXT;
-- ---------------------------------------------------------------------
-- Table `tagente_datos`
@ -2683,6 +2683,7 @@ CREATE TABLE `tagent_repository` (
`arch` ENUM('x64', 'x86') DEFAULT 'x64',
`version` VARCHAR(10) DEFAULT '',
`path` text,
`deployment_timeout` INT UNSIGNED DEFAULT 600,
`uploaded_by` VARCHAR(100) DEFAULT '',
`uploaded` bigint(20) NOT NULL DEFAULT 0 COMMENT "When it was uploaded",
`last_err` text,
@ -4223,3 +4224,31 @@ INSERT INTO `tncm_script` VALUES
(5,5,'enable&#x0d;&#x0a;expect:Password:&#92;s*&#x0d;&#x0a;_enablepass_&#x0d;&#x0a;term&#x20;length&#x20;0&#x0d;&#x0a;config&#x20;term&#x0d;&#x0a;end&#x0d;&#x0a;end&#x0d;&#x0a;exit&#x0d;&#x0a;');
INSERT INTO `tncm_template_scripts`(`id_template`, `id_script`) VALUES (1,1),(1,2),(1,3),(1,4),(1,5);
-- ----------------------------------------------------------------------
-- Table `talert_calendar`
-- ----------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `talert_calendar` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL default '',
`id_group` INT(10) NOT NULL DEFAULT 0,
`description` text,
PRIMARY KEY (`id`),
UNIQUE (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT IGNORE INTO `talert_calendar` VALUES (1, 'Default', 0, 'Default calendar');
ALTER TABLE `talert_special_days` ADD COLUMN `id_calendar` int(10) unsigned NOT NULL DEFAULT 1;
ALTER TABLE `talert_special_days` ADD COLUMN `day_code` tinyint(2) unsigned NOT NULL DEFAULT 0;
UPDATE `talert_special_days` set `day_code` = 1 WHERE `same_day` = 'monday';
UPDATE `talert_special_days` set `day_code` = 2 WHERE `same_day` = 'tuesday';
UPDATE `talert_special_days` set `day_code` = 3 WHERE `same_day` = 'wednesday';
UPDATE `talert_special_days` set `day_code` = 4 WHERE `same_day` = 'thursday';
UPDATE `talert_special_days` set `day_code` = 5 WHERE `same_day` = 'friday';
UPDATE `talert_special_days` set `day_code` = 6 WHERE `same_day` = 'saturday';
UPDATE `talert_special_days` set `day_code` = 7 WHERE `same_day` = 'sunday';
ALTER TABLE `talert_special_days` DROP COLUMN `same_day`;
ALTER TABLE `talert_special_days` ADD FOREIGN KEY (`id_calendar`) REFERENCES `talert_calendar`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;

View File

@ -341,6 +341,7 @@ if (isset($groups[$grupo]) || $new_agent) {
'selected' => $grupo,
'return' => true,
'required' => true,
'privilege' => 'AW',
]
);
} else {

View File

@ -196,6 +196,13 @@ if ($create_agent) {
$nombre_agente = hash('sha256', $alias.'|'.$direccion_agente.'|'.time().'|'.sprintf('%04d', rand(0, 10000)));
$grupo = (int) get_parameter_post('grupo');
if ((bool) check_acl($config['id_user'], $grupo, 'AW') === false) {
db_pandora_audit('ACL Violation', 'Trying to access agent manager');
include $config['homedir'].'/general/noaccess.php';
return;
}
$intervalo = (string) get_parameter_post('intervalo', SECONDS_5MINUTES);
$comentarios = (string) get_parameter_post('comentarios', '');
$modo = (int) get_parameter_post('modo');

View File

@ -688,7 +688,7 @@ foreach ($simple_alerts as $alert) {
$data[3] .= '</tr>';
}
$data[3] .= '<div id="update_action-div" class="invisible left">';
$data[3] .= '<div id="update_action-div" class="invisible">';
$data[3] .= '</div>';
$data[3] .= '</table>';
// Is possible manage actions if have LW permissions in the agent group of the alert module
@ -1163,18 +1163,18 @@ function show_display_update_action(id_module_action, alert_id, alert_id_agent_m
background: "black"
},
open: function() {
$("#action_select_ajax, #action_select_ajax").select2({
$('#update_action-div').css('overflow', 'hidden');
$("#action_select, #action_select_ajax").select2({
tags: true,
dropdownParent: $("#update_action-div")
dropdownParent: $('#update_action-')
});
},
width: 500,
height: 300
width: 455,
height: 370
})
.show ();
}
});
}
/* ]]> */

View File

@ -1,577 +1,75 @@
<?php
/**
* Calendar controller.
*
* @category Alerts
* @package Pandora FMS
* @subpackage Community
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2021 Artica Soluciones Tecnologicas
* Please see http://pandorafms.org for full contribution list
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation for version 2.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* ============================================================================
*/
// Pandora FMS - http://pandorafms.com
// ==================================================
// Copyright (c) 2005-2021 Artica Soluciones Tecnologicas
// Copyright (c) 2012-2016 Junichi Satoh
// 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
// Begin.
global $config;
require_once 'include/functions_alerts.php';
require_once 'include/ics-parser/class.iCalReader.php';
require_once $config['homedir'].'/vendor/autoload.php';
require_once $config['homedir'].'/include/class/CalendarManager.class.php';
check_login();
use PandoraFMS\CalendarManager;
if (! check_acl($config['id_user'], 0, 'LM')) {
db_pandora_audit(
'ACL Violation',
'Trying to access Alert Management'
);
include 'general/noaccess.php';
exit;
}
$ajaxPage = 'godmode/alerts/alert_special_days';
$url = 'index.php?sec=galertas&sec2=godmode/alerts/alert_special_days';
if (is_ajax()) {
$get_alert_command = (bool) get_parameter('get_alert_command');
if ($get_alert_command) {
$id = (int) get_parameter('id');
$command = alerts_get_alert_command($id);
echo json_encode($command);
// Control call flow.
try {
// User access and validation is being processed on class constructor.
$cs = new CalendarManager($url, $ajaxPage);
} catch (Exception $e) {
if ((bool) is_ajax() === true) {
echo json_encode(['error' => '[CalendarManager]'.$e->getMessage() ]);
exit;
} else {
echo '[CalendarManager]'.$e->getMessage();
}
// Stop this execution, but continue 'globally'.
return;
}
// Header
ui_print_page_header(
__('Alerts').' &raquo; '.__('Special days list'),
'images/gm_alerts.png',
false,
'alert_special_days',
true
);
// AJAX controller.
if ((bool) is_ajax() === true) {
$method = get_parameter('method');
$update_special_day = (bool) get_parameter('update_special_day');
$create_special_day = (bool) get_parameter('create_special_day');
$delete_special_day = (bool) get_parameter('delete_special_day');
$upload_ical = (bool) get_parameter('upload_ical', 0);
$display_range = (int) get_parameter('display_range');
if ($upload_ical) {
$same_day = (string) get_parameter('same_day');
$overwrite = (bool) get_parameter('overwrite', 0);
$values = [];
$values['id_group'] = (string) get_parameter('id_group');
$values['same_day'] = $same_day;
$error = $_FILES['ical_file']['error'];
$extension = substr($_FILES['ical_file']['name'], -3);
if ($error == 0 && strcasecmp($extension, 'ics') == 0) {
$skipped_dates = '';
// $today = date ('Ymd');
$this_month = date('Ym');
$ical = new ICal($_FILES['ical_file']['tmp_name']);
$events = $ical->events();
foreach ($events as $event) {
$event_date = substr($event['DTSTART'], 0, 8);
$event_month = substr($event['DTSTART'], 0, 6);
if ($event_month >= $this_month) {
$values['description'] = @$event['SUMMARY'];
$values['date'] = $event_date;
$date = date('Y-m-d', strtotime($event_date));
$date_check = '';
$filter['id_group'] = $values['id_group'];
$filter['date'] = $date;
$date_check = db_get_value_filter('date', 'talert_special_days', $filter);
if ($date_check == $date) {
if ($overwrite) {
$id_special_day = db_get_value_filter('id', 'talert_special_days', $filter);
alerts_update_alert_special_day($id_special_day, $values);
} else {
if ($skipped_dates == '') {
$skipped_dates = __('Skipped dates: ');
}
$skipped_dates .= $date.' ';
}
} else {
alerts_create_alert_special_day($date, $same_day, $values);
}
}
}
$result = true;
} else {
$result = false;
}
if ($result) {
db_pandora_audit('Special days list', 'Upload iCalendar '.$_FILES['ical_file']['name']);
}
ui_print_result_message($result, __('Success to upload iCalendar').'<br />'.$skipped_dates, __('Fail to upload iCalendar'));
}
if ($create_special_day) {
$date = (string) get_parameter('date');
$same_day = (string) get_parameter('same_day');
$values = [];
$values['id_group'] = (string) get_parameter('id_group');
$values['description'] = io_safe_input(strip_tags(io_safe_output((string) get_parameter('description'))));
$aviable_description = true;
if (preg_match('/script/i', $values['description'])) {
$aviable_description = false;
}
$array_date = explode('-', $date);
$year = $array_date[0];
$month = $array_date[1];
$day = $array_date[2];
if ($year == '*') {
// '0001' means every year.
$year = '0001';
$date = $year.'-'.$month.'-'.$day;
}
if (!checkdate($month, $day, $year)) {
$result = '';
} else {
$date_check = '';
$filter['id_group'] = $values['id_group'];
$filter['date'] = $date;
$date_check = db_get_value_filter('date', 'talert_special_days', $filter);
if ($date_check == $date) {
$result = '';
$messageAction = __('Could not be created, it already exists');
if (method_exists($cs, $method) === true) {
if (CalendarManager::ajaxMethod($method) === true) {
$cs->{$method}();
} else {
if ($aviable_description) {
$result = alerts_create_alert_special_day($date, $same_day, $values);
$info = '{"Date":"'.$date.'","Same day of the week":"'.$same_day.'","Description":"'.$values['description'].'"}';
} else {
$result = false;
}
$cs->error('Unavailable method.');
}
}
if ($result) {
db_pandora_audit('Command management', 'Create special day '.$result, false, false, $info);
} else {
db_pandora_audit('Command management', 'Fail try to create special day', false, false);
$cs->error('Method not found. ['.$method.']');
}
// Show errors
if (!isset($messageAction)) {
$messageAction = __('Could not be created');
}
$messageAction = ui_print_result_message(
$result,
__('Successfully created'),
$messageAction
);
}
if ($update_special_day) {
$id = (int) get_parameter('id');
$alert = alerts_get_alert_special_day($id);
$date = (string) get_parameter('date');
$date_orig = (string) get_parameter('date_orig');
$same_day = (string) get_parameter('same_day');
$description = io_safe_input(strip_tags(io_safe_output((string) get_parameter('description'))));
$id_group = (string) get_parameter('id_group');
$id_group_orig = (string) get_parameter('id_group_orig');
$aviable_description = true;
if (preg_match('/script/i', $description)) {
$aviable_description = false;
}
$array_date = explode('-', $date);
$year = $array_date[0];
$month = $array_date[1];
$day = $array_date[2];
if ($year == '*') {
// '0001' means every year.
$year = '0001';
$date = $year.'-'.$month.'-'.$day;
}
$values = [];
$values['date'] = $date;
$values['id_group'] = $id_group;
$values['same_day'] = $same_day;
$values['description'] = $description;
if (!checkdate($month, $day, $year)) {
$result = '';
} else {
if ($id_group != $id_group_orig || $date != $date_orig) {
$date_check = '';
$filter['id_group'] = $id_group;
$filter['date'] = $date;
$date_check = db_get_value_filter('date', 'talert_special_days', $filter);
if ($date_check == $date) {
$result = '';
$messageAction = __('Could not be updated, it already exists');
} else {
if ($aviable_description !== false) {
$result = alerts_update_alert_special_day($id, $values);
$info = '{"Date":"'.$date.'","Same day of the week":"'.$same_day.'","Description":"'.$description.'"}';
}
}
} else {
if ($aviable_description !== false) {
$result = alerts_update_alert_special_day($id, $values);
$info = '{"Date":"'.$date.'","Same day of the week":"'.$same_day.'","Description":"'.$description.'"}';
}
}
}
if ($result) {
db_pandora_audit('Command management', 'Update special day '.$id, false, false, $info);
} else {
db_pandora_audit('Command management', 'Fail to update special day '.$id, false, false);
}
// Show errors
if (!isset($messageAction)) {
$messageAction = __('Could not be updated');
}
$messageAction = ui_print_result_message(
$result,
__('Successfully updated'),
$messageAction
);
}
if ($delete_special_day) {
$id = (int) get_parameter('id');
$result = alerts_delete_alert_special_day($id);
if ($result) {
db_pandora_audit('Command management', 'Delete special day '.$id);
} else {
db_pandora_audit('Command management', 'Fail to delete special day '.$id);
}
ui_print_result_message(
$result,
__('Successfully deleted'),
__('Could not be deleted')
);
}
echo "<table cellpadding='4' cellspacing='4' class='databox upload bolder margin-bottom-10' width='100%
'><tr>";
echo "<form method='post' enctype='multipart/form-data' action='index.php?sec=gagente&sec2=godmode/alerts/alert_special_days'>";
echo '<td>';
echo __('iCalendar(.ics) file').'&nbsp;';
html_print_input_file('ical_file', false, false);
echo '</td><td>';
echo __('Same day of the week');
$days = [];
$days['monday'] = __('Monday');
$days['tuesday'] = __('Tuesday');
$days['wednesday'] = __('Wednesday');
$days['thursday'] = __('Thursday');
$days['friday'] = __('Friday');
$days['saturday'] = __('Saturday');
$days['sunday'] = __('Sunday');
html_print_select($days, 'same_day', $same_day, '', '', 0, false, false, false);
echo '</td><td>';
echo __('Group').'&nbsp;';
$own_info = get_user_info($config['id_user']);
if (!users_can_manage_group_all('LM')) {
$can_manage_group_all = false;
// Stop any execution.
exit;
} else {
$can_manage_group_all = true;
// Run.
$cs->run();
}
echo '<div class="inline w250px">';
html_print_select_groups(false, 'LM', $can_manage_group_all, 'id_group', $id_group, false, '', 0, false, false, true, '', false, 'width:100px;');
echo '</div>';
echo '</td><td>';
echo __('Overwrite');
ui_print_help_tip(__('Check this box, if you want to overwrite existing same days.'), false);
echo '&nbsp;';
html_print_checkbox('overwrite', 1, $overwrite, false, false, false, true);
echo '</td><td>';
html_print_input_hidden('upload_ical', 1);
echo "<input name='srcbutton' type='submit' class='sub next' value='".__('Upload')."'>";
echo '</td></form>';
echo '</tr></table>';
$this_year = date('Y');
$this_month = date('m');
$filter = [];
if (!is_user_admin($config['id_user'])) {
$filter['id_group'] = array_keys(users_get_groups(false, 'LM'));
}
// Show display range.
$html = "<table cellpadding='4' cellspacing='4' width='100%' margin-bottom: 10px;'><tr><td>".__('Display range: ');
if ($display_range) {
$html .= '<a href="index.php?sec=galertas&sec2=godmode/alerts/alert_special_days">['.__('Default').']</a>&nbsp;&nbsp;';
if ($display_range > 1970) {
$html .= '<a href="index.php?sec=galertas&sec2=godmode/alerts/alert_special_days&display_range=';
$html .= ($display_range - 1);
$html .= '">&lt;&lt;&nbsp;</a>';
}
$html .= '<a href="index.php?sec=galertas&sec2=godmode/alerts/alert_special_days&display_range='.$display_range.'" class="bolder">['.$display_range.']</a>';
$html .= '<a href="index.php?sec=galertas&sec2=godmode/alerts/alert_special_days&display_range=';
$html .= ($display_range + 1);
$html .= '">&nbsp;&gt;&gt;</a>';
} else {
$html .= '<a href="index.php?sec=galertas&sec2=godmode/alerts/alert_special_days" class="bolder">['.__('Default').']</a>&nbsp;&nbsp;';
$html .= '<a href="index.php?sec=galertas&sec2=godmode/alerts/alert_special_days&display_range=';
$html .= ($this_year - 1);
$html .= '">&lt;&lt;&nbsp;</a>';
$html .= '<a href="index.php?sec=galertas&sec2=godmode/alerts/alert_special_days&display_range=';
$html .= $this_year;
$html .= '">[';
$html .= $this_year;
$html .= ']</a>';
$html .= '<a href="index.php?sec=galertas&sec2=godmode/alerts/alert_special_days&display_range=';
$html .= ($this_year + 1);
$html .= '">&nbsp;&gt;&gt;</a>';
}
$html .= '</td></tr>';
echo $html;
// Show calendar
for ($month = 1; $month <= 12; $month++) {
if ($display_range) {
$display_month = $month;
$display_year = $display_range;
} else {
$display_month = ($this_month + $month - 1);
$display_year = $this_year;
}
if ($display_month > 12) {
$display_month -= 12;
$display_year += 1;
}
$cal_table = new stdClass();
$cal_table->width = '100%';
$cal_table->class = 'databox data';
$cal_table->data = [];
$cal_table->head = [];
$cal_table->head[0] = __('Sun');
$cal_table->head[1] = __('Mon');
$cal_table->head[2] = __('Tue');
$cal_table->head[3] = __('Wed');
$cal_table->head[4] = __('Thu');
$cal_table->head[5] = __('Fri');
$cal_table->head[6] = __('Sat');
$cal_table->cellstyle = [];
$cal_table->size = [];
$cal_table->size[0] = '14%';
$cal_table->size[1] = '14%';
$cal_table->size[2] = '14%';
$cal_table->size[3] = '14%';
$cal_table->size[4] = '14%';
$cal_table->size[5] = '14%';
$cal_table->size[6] = '14%';
$cal_table->align = [];
$cal_table->border = '1';
$cal_table->titlestyle = 'text-align:center; font-weight: bold;';
switch ($display_month) {
case 1:
$cal_table->title = __('January');
break;
case 2:
$cal_table->title = __('February');
break;
case 3:
$cal_table->title = __('March');
break;
case 4:
$cal_table->title = __('April');
break;
case 5:
$cal_table->title = __('May');
break;
case 6:
$cal_table->title = __('June');
break;
case 7:
$cal_table->title = __('July');
break;
case 8:
$cal_table->title = __('August');
break;
case 9:
$cal_table->title = __('September');
break;
case 10:
$cal_table->title = __('October');
break;
case 11:
$cal_table->title = __('November');
break;
case 12:
$cal_table->title = __('December');
break;
}
$cal_table->title .= ' / '.$display_year;
$last_day = date('j', mktime(0, 0, 0, ($display_month + 1), 0, $display_year));
$cal_line = 0;
for ($day = 1; $day < ($last_day + 1); $day++) {
$week = date('w', mktime(0, 0, 0, $display_month, $day, $display_year));
if ($cal_line == 0 && $week != 0 && $day == 1) {
for ($i = 0; $i < $week; $i++) {
$cal_table->cellstyle[$cal_line][$i] = 'font-size: 18px;';
$cal_table->data[$cal_line][$i] = '-';
}
}
if ($week == 0 || $week == 6) {
$cal_table->cellstyle[$cal_line][$week] = 'color: red;';
}
$date = sprintf('%04d-%02d-%02d', $display_year, $display_month, $day);
$date_wildcard = sprintf('0001-%02d-%02d', $display_month, $day);
$special_days = '';
$filter['date'] = [
$date,
$date_wildcard,
];
$filter['order']['field'] = 'date';
$filter['order']['order'] = 'DESC';
$special_days = db_get_all_rows_filter('talert_special_days', $filter);
if ($special_days != '') {
foreach ($special_days as $special_day) {
$cal_table->data[$cal_line][$week] .= '<div class="font_18px" style="';
if ($special_day['same_day'] == 'sunday' || $special_day['same_day'] == 'saturday') {
$cal_table->data[$cal_line][$week] .= 'color: red;';
}
$cal_table->data[$cal_line][$week] .= '">';
$cal_table->data[$cal_line][$week] .= $day;
$cal_table->data[$cal_line][$week] .= '</div>';
$cal_table->data[$cal_line][$week] .= ui_print_group_icon($special_day['id_group'], true);
if ($special_day['date'] == $date_wildcard) {
$cal_table->data[$cal_line][$week] .= '('.ui_print_help_tip('This is valid every year. However, this will be ignored if indivisual setting for the same group is available.', true).') ';
}
$cal_table->data[$cal_line][$week] .= __('Same as ');
switch ($special_day['same_day']) {
case 'monday':
$cal_table->data[$cal_line][$week] .= __('Monday');
break;
case 'tuesday':
$cal_table->data[$cal_line][$week] .= __('Tuesday');
break;
case 'wednesday':
$cal_table->data[$cal_line][$week] .= __('Wednesday');
break;
case 'thursday':
$cal_table->data[$cal_line][$week] .= __('Thursday');
break;
case 'friday':
$cal_table->data[$cal_line][$week] .= __('Friday');
break;
case 'saturday':
$cal_table->data[$cal_line][$week] .= __('Saturday');
break;
case 'sunday':
$cal_table->data[$cal_line][$week] .= __('Sunday');
break;
}
// Only show description if is filled.
if (empty($special_day['description']) === false) {
$cal_table->data[$cal_line][$week] .= ui_print_help_tip($special_day['description'], true);
}
if ($special_day['id_group'] || ($can_manage_group_all && $special_day['id_group'] == 0)) {
$cal_table->data[$cal_line][$week] .= '<a href="index.php?sec=galertas&sec2=godmode/alerts/configure_alert_special_days&id='.$special_day['id'].'" title=';
$cal_table->data[$cal_line][$week] .= __('Edit');
$cal_table->data[$cal_line][$week] .= '>'.html_print_image(
'images/config.png',
true,
['class' => 'invert_filter']
).'</a> &nbsp;';
$cal_table->data[$cal_line][$week] .= '<a href="index.php?sec=galertas&sec2=godmode/alerts/alert_special_days&delete_special_day=1&id='.$special_day['id'].'"onClick="if (!confirm(\''.__('Are you sure?').'\')) return false;" title=';
$cal_table->data[$cal_line][$week] .= __('Remove');
$cal_table->data[$cal_line][$week] .= '>'.html_print_image(
'images/cross.png',
true,
['class' => 'invert_filter']
).'</a>';
;
}
$cal_table->data[$cal_line][$week] .= '<br>';
$cal_table->cellstyle[$cal_line][$week] = 'font-weight: bold;';
}
} else {
$cal_table->cellstyle[$cal_line][$week] .= 'font-size: 18px;';
$cal_table->data[$cal_line][$week] = $day.'&nbsp;';
}
$cal_table->data[$cal_line][$week] .= '<a href="index.php?sec=galertas&sec2=godmode/alerts/configure_alert_special_days&create_special_day=1&date='.$date.'" title=';
$cal_table->data[$cal_line][$week] .= __('Create');
$cal_table->data[$cal_line][$week] .= '>'.html_print_image(
'images/add_mc.png',
true,
['class' => 'invert_filter']
).'</a>';
if ($week == 6) {
$cal_line++;
}
}
for ($padding = ($week + 1); $padding <= 6; $padding++) {
$cal_table->cellstyle[$cal_line][$padding] = 'font-size: 18px;';
$cal_table->data[$cal_line][$padding] = '-';
}
html_print_table($cal_table);
}
echo '<div class="action-buttons" style="width: '.$table->width.'">';
echo '<form method="post" action="index.php?sec=galertas&sec2=godmode/alerts/configure_alert_special_days">';
html_print_submit_button(__('Create'), 'create', false, 'class="sub next"');
html_print_input_hidden('create_special_day', 1);
echo '</form>';
echo '</div>';

View File

@ -1,159 +0,0 @@
<?php
// Pandora FMS - http://pandorafms.com
// ==================================================
// Copyright (c) 2005-2021 Artica Soluciones Tecnologicas
// Copyright (c) 2012-2013 Junichi Satoh
// 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.
global $config;
require_once 'include/functions_alerts.php';
check_login();
if (! check_acl($config['id_user'], 0, 'LM')) {
db_pandora_audit(
'ACL Violation',
'Trying to access Alert Management'
);
include 'general/noaccess.php';
exit;
}
ui_require_javascript_file('calendar');
$id = (int) get_parameter('id');
$date = (string) get_parameter('date');
$name = '';
$command = '';
$description = '';
$same_day = '';
$id_group = 0;
if ($id) {
$special_day = alerts_get_alert_special_day($id);
$date = str_replace('0001', '*', $special_day['date']);
$date_orig = $date;
$same_day = $special_day['same_day'];
$description = $special_day['description'];
$id_group = $special_day['id_group'];
$id_group_orig = $id_group;
}
if ($date == '') {
$date = date('Y-m-d', get_system_time());
}
// Header.
ui_print_page_header(
__('Alerts').' &raquo; '.__('Configure special day'),
'images/gm_alerts.png',
false,
'',
true
);
$table = new stdClass();
$table->width = '100%';
$table->class = 'databox filters';
$table->style = [];
$table->style[0] = 'font-weight: bold';
$table->size = [];
$table->size[0] = '20%';
$table->data = [];
$table->data[0][0] = __('Date');
$table->data[0][1] = html_print_input_text(
'date',
$date,
'',
10,
10,
true
);
$table->data[0][1] .= html_print_image(
'images/calendar_view_day.png',
true,
[
'alt' => 'calendar',
'onclick' => "scwShow(scwID('text-date'),this);",
'class' => 'invert_filter',
]
);
$table->data[1][0] = __('Group');
$groups = users_get_groups();
$own_info = get_user_info($config['id_user']);
// Only display group "All" if user is administrator or has "LM" privileges.
if (users_can_manage_group_all('LM')) {
$display_all_group = true;
} else {
$display_all_group = false;
}
$table->data[1][1] = html_print_select_groups(
false,
'LW',
$display_all_group,
'id_group',
$id_group,
'',
'',
0,
true
);
$table->data[2][0] = __('Same day of the week');
$days = [];
$days['monday'] = __('Monday');
$days['tuesday'] = __('Tuesday');
$days['wednesday'] = __('Wednesday');
$days['thursday'] = __('Thursday');
$days['friday'] = __('Friday');
$days['saturday'] = __('Saturday');
$days['sunday'] = __('Sunday');
$table->data[2][1] = html_print_select(
$days,
'same_day',
$same_day,
'',
'',
0,
true,
false,
false
);
$table->data[3][0] = __('Description');
$table->data[3][1] = html_print_textarea(
'description',
10,
30,
$description,
'',
true
);
echo '<form method="post" action="index.php?sec=galertas&sec2=godmode/alerts/alert_special_days">';
html_print_table($table);
echo '<div class="action-buttons" style="width: '.$table->width.'">';
if ($id) {
html_print_input_hidden('id', $id);
html_print_input_hidden('update_special_day', 1);
html_print_input_hidden('id_group_orig', $id_group_orig);
html_print_input_hidden('date_orig', $date_orig);
html_print_submit_button(__('Update'), 'create', false, 'class="sub upd"');
} else {
html_print_input_hidden('create_special_day', 1);
html_print_submit_button(__('Create'), 'create', false, 'class="sub wand"');
}
echo '</div>';
echo '</form>';

View File

@ -11,8 +11,11 @@
// 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;
use PandoraFMS\Calendar;
require_once $config['homedir'].'/include/functions_alerts.php';
require_once $config['homedir'].'/include/functions_users.php';
enterprise_include_once('meta/include/functions_alerts_meta.php');
@ -288,7 +291,7 @@ function update_template($step)
$friday = (bool) get_parameter('friday');
$saturday = (bool) get_parameter('saturday');
$sunday = (bool) get_parameter('sunday');
$special_day = (bool) get_parameter('special_day');
$special_day = (int) get_parameter('special_day');
$time_from = (string) get_parameter('time_from');
$time_from = date('H:i:00', strtotime($time_from));
$time_to = (string) get_parameter('time_to');
@ -418,7 +421,7 @@ $thursday = true;
$friday = true;
$saturday = true;
$sunday = true;
$special_day = false;
$special_day = 0;
$default_action = 0;
$fields = [];
for ($i = 1; $i <= $config['max_macro_fields']; $i++) {
@ -561,7 +564,7 @@ if ($id && ! $create_template) {
$friday = (bool) $template['friday'];
$saturday = (bool) $template['saturday'];
$sunday = (bool) $template['sunday'];
$special_day = (bool) $template['special_day'];
$special_day = (int) $template['special_day'];
$max_alerts = $template['max_alerts'];
$min_alerts = $template['min_alerts'];
$min_alerts_reset_counter = $template['min_alerts_reset_counter'];
@ -671,11 +674,36 @@ if ($step == 2) {
);
$table->data[0][2] = __('Use special days list');
$table->data[0][3] = html_print_checkbox(
$data_special_days = Calendar::calendars(
// Fields.
[ '`talert_calendar`.*' ],
// Filter.
[],
// Count.
false,
// Offset.
null,
// Limit.
null,
// Order.
null,
// Sort field.
null,
// Reduce to a select.
true
);
$table->data[0][3] = html_print_select(
$data_special_days,
'special_day',
1,
$special_day,
'',
__('None'),
0,
true,
false,
false,
'',
(!$is_management_allowed | $disabled)
);

View File

@ -60,7 +60,7 @@ if (check_acl($config['id_user'], 0, 'AR')
// Add to menu.
$menu_godmode['discovery']['text'] = __('Discovery');
$menu_godmode['discovery']['sec2'] = 'godmode/servers/discovery';
$menu_godmode['discovery']['sec2'] = '';
$menu_godmode['discovery']['id'] = 'god-discovery';
$menu_godmode['discovery']['sub'] = $sub;
}
@ -526,7 +526,7 @@ $menu_godmode['links']['sub'] = $sub;
if (check_acl($config['id_user'], 0, 'PM') && $config['enable_update_manager']) {
$menu_godmode['messages']['text'] = __('Update manager');
$menu_godmode['messages']['id'] = 'god-um_messages';
$menu_godmode['messages']['sec2'] = 'godmode/update_manager/update_manager';
$menu_godmode['messages']['sec2'] = '';
$sub = [];
$sub['godmode/update_manager/update_manager&tab=offline']['text'] = __('Update Manager offline');

View File

@ -3505,7 +3505,7 @@ function print_SLA_list($width, $action, $idItem=null)
<tr id="sla_template" class="datos">
<td colspan="6">
<?php
echo __('Please save the SLA for start to add items in this list.');
echo __('Please save the item before adding entries to this list.');
?>
</td>
</tr>

View File

@ -1970,9 +1970,11 @@ switch ($action) {
);
$values['id_group'] = get_parameter('combo_group');
$values['server_name'] = get_parameter(
'combo_server'
);
if ($values['server_name'] == '') {
$values['server_name'] = get_parameter(
'combo_server'
);
}
if ((($values['type'] == 'custom_graph')
|| ($values['type'] == 'automatic_custom_graph'))

View File

@ -1513,7 +1513,7 @@ $(document).ready (function () {
$('#table_macros-field' + i)
.removeAttr('class');
$("[name=field" + i + "_value]").val(old_value);
$("[name=field" + i + "_value]").val(old_value).trigger('change');
$('#table_macros-field').show();
}
}

View File

@ -1,17 +1,28 @@
<?php
/**
* * Configure profiles.
*
* @category Profiles
* @package Pandora FMS
* @subpackage Community
* @version 1.0.0
* @license See below
*
*
* 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.
*/
// 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.
// Global variables
// Global variables.
global $config;
check_login();
@ -32,7 +43,7 @@ enterprise_include_once('meta/include/functions_users_meta.php');
$tab = get_parameter('tab', 'profile');
$pure = get_parameter('pure', 0);
// Header
// Header.
if (!is_metaconsole()) {
$buttons = [
'user' => [
@ -79,46 +90,46 @@ if (!is_metaconsole()) {
$new_profile = (bool) get_parameter('new_profile');
$id_profile = (int) get_parameter('id');
// Edit profile
// Edit profile.
if ($id_profile || $new_profile) {
if ($new_profile) {
// Name
// Name.
$name = '';
// Agents
// Agents.
$agent_view = 0;
$agent_edit = 0;
$agent_disable = 0;
// Alerts
// Alerts.
$alert_edit = 0;
$alert_management = 0;
// Users
// Users.
$user_management = 0;
// DB
// DB.
$db_management = 0;
// Pandora
// Pandora.
$pandora_management = 0;
// Events
// Events.
$event_view = 0;
$event_edit = 0;
$event_management = 0;
// Reports
// Reports.
$report_view = 0;
$report_edit = 0;
$report_management = 0;
// Network maps
// Network maps.
$map_view = 0;
$map_edit = 0;
$map_management = 0;
// Visual console
// Visual console.
$vconsole_view = 0;
$vconsole_edit = 0;
$vconsole_management = 0;
@ -145,43 +156,43 @@ if ($id_profile || $new_profile) {
exit;
}
// Name
// Name.
$name = $profile['name'];
// Agents
// Agents.
$agent_view = (bool) $profile['agent_view'];
$agent_edit = (bool) $profile['agent_edit'];
$agent_disable = (bool) $profile['agent_disable'];
// Alerts
// Alerts.
$alert_edit = (bool) $profile['alert_edit'];
$alert_management = (bool) $profile['alert_management'];
// Users
// Users.
$user_management = (bool) $profile['user_management'];
// DB
// DB.
$db_management = (bool) $profile['db_management'];
// Pandora
// Pandora.
$pandora_management = (bool) $profile['pandora_management'];
// Events
// Events.
$event_view = (bool) $profile['event_view'];
$event_edit = (bool) $profile['event_edit'];
$event_management = (bool) $profile['event_management'];
// Reports
// Reports.
$report_view = (bool) $profile['report_view'];
$report_edit = (bool) $profile['report_edit'];
$report_management = (bool) $profile['report_management'];
// Network maps
// Network maps.
$map_view = (bool) $profile['map_view'];
$map_edit = (bool) $profile['map_edit'];
$map_management = (bool) $profile['map_management'];
// Visual console
// Visual console.
$vconsole_view = (bool) $profile['vconsole_view'];
$vconsole_edit = (bool) $profile['vconsole_edit'];
$vconsole_management = (bool) $profile['vconsole_management'];
@ -249,14 +260,14 @@ if ($id_profile || $new_profile) {
$table->style[0] = 'font-weight: bold';
$table->data = [];
// Name
// Name.
$row = [];
$row['name'] = __('Profile name');
$row['input'] = html_print_input_text('name', $name, '', 30, 60, true);
$table->data['name'] = $row;
$table->data[] = '<hr>';
// Agents
// Agents.
$row = [];
$row['name'] = __('View agents');
$row['input'] = html_print_checkbox('agent_view', 1, $agent_view, true);
@ -271,7 +282,7 @@ if ($id_profile || $new_profile) {
$table->data['AW'] = $row;
$table->data[] = '<hr>';
// Alerts
// Alerts.
$row = [];
$row['name'] = __('Edit alerts');
$row['input'] = html_print_checkbox('alert_edit', 1, $alert_edit, true);
@ -282,7 +293,7 @@ if ($id_profile || $new_profile) {
$table->data['LM'] = $row;
$table->data[] = '<hr>';
// Events
// Events.
$row = [];
$row['name'] = __('View events');
$row['input'] = html_print_checkbox('event_view', 1, $event_view, true);
@ -297,7 +308,7 @@ if ($id_profile || $new_profile) {
$table->data['EM'] = $row;
$table->data[] = '<hr>';
// Reports
// Reports.
$row = [];
$row['name'] = __('View reports');
$row['input'] = html_print_checkbox('report_view', 1, $report_view, true);
@ -312,7 +323,7 @@ if ($id_profile || $new_profile) {
$table->data['RM'] = $row;
$table->data[] = '<hr>';
// Network maps
// Network maps.
$row = [];
$row['name'] = __('View network maps');
$row['input'] = html_print_checkbox('map_view', 1, $map_view, true);
@ -327,7 +338,7 @@ if ($id_profile || $new_profile) {
$table->data['MM'] = $row;
$table->data[] = '<hr>';
// Visual console
// Visual console.
$row = [];
$row['name'] = __('View visual console');
$row['input'] = html_print_checkbox('vconsole_view', 1, $vconsole_view, true);
@ -347,36 +358,36 @@ if ($id_profile || $new_profile) {
$disable_option = '';
}
// NCM
// NCM.
$row = [];
$row['name'] = __('View NCM data');
$row['input'] = html_print_checkbox('network_config_view', 1, $network_config_view, true);
$table->data['VR'] = $row;
$table->data['NR'] = $row;
$row = [];
$row['name'] = __('Operate NCM');
$row['input'] = html_print_checkbox('network_config_edit', 1, $network_config_edit, true, false, 'autoclick_profile_users(\'network_config_edit\', \'network_config_view\', \'false\')');
$table->data['VW'] = $row;
$table->data['NW'] = $row;
$row = [];
$row['name'] = __('Manage NCM');
$row['input'] = html_print_checkbox('network_config_management', 1, $network_config_management, true, false, 'autoclick_profile_users(\'network_config_management\', \'network_config_view\', \'network_config_edit\')');
$table->data['VM'] = $row;
$table->data['NM'] = $row;
$table->data[] = '<hr>';
// Users
// Users.
$row = [];
$row['name'] = __('Manage users');
$row['input'] = html_print_checkbox('user_management', 1, $user_management, true, false, $disable_option);
$table->data['UM'] = $row;
$table->data[] = '<hr>';
// DB
// DB.
$row = [];
$row['name'] = __('Manage database');
$row['input'] = html_print_checkbox('db_management', 1, $db_management, true, false, $disable_option);
$table->data['DM'] = $row;
$table->data[] = '<hr>';
// Pandora
// Pandora.
$row = [];
$row['name'] = __('%s management', get_product_name());
$row['input'] = html_print_checkbox('pandora_management', 1, $pandora_management, true, false, $disable_option);

View File

@ -140,7 +140,9 @@ if (is_ajax()) {
$has_profile = db_get_row('tusuario_perfil', 'id_usuario', $id2);
if ($has_profile == false) {
$user_is_global_admin = users_is_admin($id2);
if ($has_profile === false && $user_is_global_admin === false) {
$result = delete_user($id2);
if ($result) {
@ -1544,6 +1546,7 @@ $(document).ready (function () {
var img_delete = '<?php echo $delete_image; ?>';
var id_user = '<?php echo io_safe_output($id); ?>';
var is_metaconsole = '<?php echo $meta; ?>';
var user_is_global_admin = '<?php echo users_is_admin($id); ?>';
var data = [];
$('input:image[name="add"]').click(function (e) {
@ -1588,7 +1591,7 @@ $(document).ready (function () {
$('input:image[name="del"]').click(function (e) {
e.preventDefault();
var rows = $("#table_profiles tr").length;
if ((is_metaconsole === '1' && rows <= 4) || (is_metaconsole === '' && rows <= 3)) {
if (((is_metaconsole === '1' && rows <= 4) || (is_metaconsole === '' && rows <= 3)) && user_is_global_admin !== '1') {
if (!confirm('<?php echo __('Deleting last profile will delete this user'); ?>' + '. ' + '<?php echo __('Are you sure?'); ?>')) {
return;
}
@ -1610,8 +1613,11 @@ $(document).ready (function () {
success: function (data) {
row.remove();
var rows = $("#table_profiles tr").length;
if ((is_metaconsole === '1' && rows <= 3) || (is_metaconsole === '' && rows <= 2)) {
if (is_metaconsole === '' && rows <= 2 && user_is_global_admin !== '1') {
window.location.replace("<?php echo ui_get_full_url('index.php?sec=gusuarios&sec2=godmode/users/user_list&tab=user&pure=0', false, false, false); ?>");
} else if (is_metaconsole === '1' && rows <= 3 && user_is_global_admin !== '1') {
window.location.replace("<?php echo ui_get_full_url('index.php?sec=advanced&sec2=advanced/users_setup', false, false, true); ?>");
}
}
});
@ -1750,7 +1756,6 @@ function show_double_auth_info () {
var $dialogContainer = $("div#dialog-double_auth-container");
$dialogContainer.html($loadingSpinner);
console.log(userID);
// Load the info page
var request = $.ajax({
url: "<?php echo ui_get_full_url('ajax.php', false, false, false); ?>",
@ -1915,7 +1920,6 @@ function show_double_auth_deactivation () {
},
success: function(data, textStatus, xhr) {
console.log(data);
if (data === -1) {
$dialogContainer.html("<?php echo '<b><div class=\"red\">'.__('Authentication error').'</div></b>'; ?>");
}

View File

@ -422,8 +422,8 @@ if ($show_update_action_menu) {
$id_action
);
$data .= '<form id="update_action-'.$alert['id'].'" method="post">';
$data .= '<table class="databox_color w100p bg_color222">';
$data .= '<form id="update_action-'.$alert['id'].'" method="post" style="height:85%;">';
$data .= '<table class="databox_color w100p bg_color222" style="height:100%;">';
$data .= html_print_input_hidden(
'update_action',
1,

View File

@ -218,6 +218,11 @@ function process_user_login_remote($login, $pass, $api=false)
switch ($config['auth']) {
// LDAP
case 'ldap':
// Use local authentication if user is global admin.
if (is_user_admin($login) === true) {
return false;
}
$sr = ldap_process_user_login($login, $pass);
if (!$sr) {
@ -227,6 +232,11 @@ function process_user_login_remote($login, $pass, $api=false)
// Active Directory
case 'ad':
// Use local authentication if user is global admin.
if (is_user_admin($login) === true) {
return false;
}
if (enterprise_hook('ad_process_user_login', [$login, $pass]) === false) {
$config['auth_error'] = 'User not found in database or incorrect password';
return false;
@ -780,7 +790,7 @@ function ldap_process_user_login($login, $password)
io_safe_output($config['ldap_base_dn']),
$config['ldap_login_attr'],
io_safe_output($config['ldap_admin_login']),
io_safe_output($config['ldap_admin_pass']),
io_output_password($config['ldap_admin_pass']),
io_safe_output($login)
);
@ -804,7 +814,7 @@ function ldap_process_user_login($login, $password)
} else {
// PHP LDAP function
if ($config['ldap_admin_login'] != '' && $config['ldap_admin_pass'] != '') {
if (!@ldap_bind($ds, io_safe_output($config['ldap_admin_login']), $config['ldap_admin_pass'])) {
if (!@ldap_bind($ds, io_safe_output($config['ldap_admin_login']), io_output_password($config['ldap_admin_pass']))) {
$config['auth_error'] = 'Admin ldap connection fail';
@ldap_close($ds);
return false;

View File

@ -2423,17 +2423,20 @@ class AgentWizard extends HTML
}
// Get current value.
if (in_array(
$moduleData['module_type'],
[
MODULE_TYPE_REMOTE_SNMP,
MODULE_TYPE_REMOTE_SNMP_INC,
MODULE_TYPE_REMOTE_SNMP_STRING,
MODULE_TYPE_REMOTE_SNMP_PROC,
]
) === true
if ($this->serverType === SERVER_TYPE_ENTERPRISE_SATELLITE
|| in_array(
$moduleData['module_type'],
[
MODULE_TYPE_REMOTE_SNMP,
MODULE_TYPE_REMOTE_SNMP_INC,
MODULE_TYPE_REMOTE_SNMP_STRING,
MODULE_TYPE_REMOTE_SNMP_PROC,
]
) === true
) {
$currentValue = $this->snmpGetValue($moduleData['value']);
if (isset($moduleData['value']) === true) {
$currentValue = $this->snmpGetValue($moduleData['value']);
}
}
// It unit of measure have data, attach to current value.
@ -2593,17 +2596,20 @@ class AgentWizard extends HTML
// Get current value.
$currentValue = '';
if (in_array(
$moduleData['module_type'],
[
MODULE_TYPE_REMOTE_SNMP,
MODULE_TYPE_REMOTE_SNMP_INC,
MODULE_TYPE_REMOTE_SNMP_STRING,
MODULE_TYPE_REMOTE_SNMP_PROC,
]
) === true
if ($this->serverType === SERVER_TYPE_ENTERPRISE_SATELLITE
|| in_array(
$moduleData['module_type'],
[
MODULE_TYPE_REMOTE_SNMP,
MODULE_TYPE_REMOTE_SNMP_INC,
MODULE_TYPE_REMOTE_SNMP_STRING,
MODULE_TYPE_REMOTE_SNMP_PROC,
]
) === true
) {
$currentValue = $this->snmpGetValue($moduleData['value']);
if (isset($moduleData['value']) === true) {
$currentValue = $this->snmpGetValue($moduleData['value']);
}
}
// Format current value with thousands and decimals.
@ -3461,7 +3467,7 @@ class AgentWizard extends HTML
} else {
preg_match('/\.\d+$/', $key, $index);
$tmp = explode(': ', $oid_unit);
$output[$index[0]] = ($tmp[1] ?? '');
$output[$index[0]] = str_replace('"', '', ($tmp[1] ?? ''));
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -52,6 +52,12 @@ class ConsoleSupervisor
*/
public const MIN_PERFORMANCE_MODULES = 100;
/**
* Minimum queued elements in synchronization queue to be warned..
*/
public const MIN_SYNC_QUEUE_LENGTH = 200;
/**
* Show if console supervisor is enabled or not.
*
@ -242,6 +248,16 @@ class ConsoleSupervisor
$this->checkAuditLogOldLocation();
/*
* Checks if sync queue is longer than limits.
* NOTIF.SYNCQUEUE.LENGTH
*/
if (is_metaconsole() === true) {
$this->checkSyncQueueLength();
$this->checkSyncQueueStatus();
}
}
@ -492,6 +508,16 @@ class ConsoleSupervisor
*/
$this->checkAuditLogOldLocation();
/*
* Checks if sync queue is longer than limits.
* NOTIF.SYNCQUEUE.LENGTH
*/
if (is_metaconsole() === true) {
$this->checkSyncQueueLength();
$this->checkSyncQueueStatus();
}
}
@ -2684,4 +2710,117 @@ class ConsoleSupervisor
}
/**
* Verifies the status of synchronization queue and warns if something is
* not working as expected.
*
* @return void
*/
public function checkSyncQueueLength()
{
global $config;
if (is_metaconsole() !== true) {
return;
}
$sync = new PandoraFMS\Enterprise\Metaconsole\Synchronizer();
$counts = $sync->getQueues(true);
if (count($counts) === 0) {
// Clean all.
$this->cleanNotifications('NOTIF.SYNCQUEUE.LENGTH.%');
}
$items_min = $config['sync_queue_items_max'];
if (is_numeric($items_min) !== true && $items_min <= 0) {
$items_min = self::MIN_SYNC_QUEUE_LENGTH;
}
foreach ($counts as $node_id => $count) {
if ($count < $items_min) {
$this->cleanNotifications('NOTIF.SYNCQUEUE.LENGTH.'.$node_id);
} else {
try {
$node = new PandoraFMS\Enterprise\Metaconsole\Node($node_id);
$url = '__url__/index.php?sec=advanced&sec2=advanced/metasetup&tab=consoles';
$this->notify(
[
'type' => 'NOTIF.SYNCQUEUE.LENGTH.'.$node_id,
'title' => __('Node %s sync queue length exceeded, ', $node->server_name()),
'message' => __(
'Synchronization queue lenght for node %s is %d items, this value should be 0 or lower than %d, please check the queue status.',
$node->server_name(),
$count,
$items_min
),
'url' => $url,
]
);
} catch (\Exception $e) {
// Clean, exception in node finding.
$this->cleanNotifications('NOTIF.SYNCQUEUE.LENGTH.'.$node_id);
}
}
}
}
/**
* Verifies the status of synchronization queue and warns if something is
* not working as expected.
*
* @return void
*/
public function checkSyncQueueStatus()
{
if (is_metaconsole() !== true) {
return;
}
$sync = new PandoraFMS\Enterprise\Metaconsole\Synchronizer();
$queues = $sync->getQueues();
if (count($queues) === 0) {
// Clean all.
$this->cleanNotifications('NOTIF.SYNCQUEUE.STATUS.%');
}
foreach ($queues as $node_id => $queue) {
if (count($queue) === 0) {
$this->cleanNotifications('NOTIF.SYNCQUEUE.STATUS.'.$node_id);
continue;
}
$item = $queue[0];
if (empty($item->error()) === false) {
try {
$node = new PandoraFMS\Enterprise\Metaconsole\Node($node_id);
$url = '__url__/index.php?sec=advanced&sec2=advanced/metasetup&tab=consoles';
$this->notify(
[
'type' => 'NOTIF.SYNCQUEUE.STATUS.'.$node_id,
'title' => __('Node %s sync queue failed, ', $node->server_name()),
'message' => __(
'Node %s cannot process synchronization queue due %s, please check the queue status.',
$node->server_name(),
$item->error()
),
'url' => $url,
]
);
} catch (\Exception $e) {
// Clean, exception in node finding.
$this->cleanNotifications('NOTIF.SYNCQUEUE.STATUS.'.$node_id);
}
}
}
}
}

View File

@ -600,7 +600,7 @@ class Tree
if (is_metaconsole()) {
$module['serverID'] = $this->serverID;
$module['serverName'] = $this->serverName;
$module['serverName'] = empty($this->serverName) === false ? $this->serverName : servers_get_name($this->serverID);
} else {
$module['serverName'] = false;
$module['serverID'] = false;
@ -895,9 +895,15 @@ class Tree
protected function processAgents(&$agents, $server=false)
{
if (!empty($agents)) {
$agents_aux = [];
foreach ($agents as $iterator => $agent) {
$this->processAgent($agents[$iterator], $server);
if ($agents[$iterator]['counters']['total'] !== '0') {
$agents_aux[] = $agents[$iterator];
}
}
$agents = $agents_aux;
}
}
@ -950,10 +956,9 @@ class Tree
$module_status_inner = '';
$module_search_inner = '';
$module_search_filter = '';
if (!empty($this->filter['searchModule'])) {
$module_search_inner = '
INNER JOIN tagente_modulo tam
ON ta.id_agente = tam.id_agente
INNER JOIN tagente_estado tae
ON tae.id_agente_modulo = tam.id_agente_modulo';
$module_search_filter = "AND tam.disabled = 0

View File

@ -32,6 +32,8 @@ class TreeOS extends Tree
'tco.icon_name AS iconHTML',
];
$this->L1inner = 'INNER JOIN tconfig_os tco ON tco.id_os = x2.g';
$this->L1innerInside = 'INNER JOIN tagente_modulo tam
ON ta.id_agente = tam.id_agente';
$this->L1orderByFinal = 'tco.name';
$this->L2condition = 'AND ta.id_os = '.$this->rootID;

View File

@ -20,8 +20,8 @@
/**
* Pandora build version and version
*/
$build_version = 'PC211115';
$pandora_version = 'v7.0NG.758';
$build_version = 'PC211124';
$pandora_version = 'v7.0NG.758.1';
// Do not overwrite default timezone set if defined.
$script_tz = @date_default_timezone_get();

View File

@ -173,6 +173,7 @@ define('COL_GRAPH13', '#E83128');
// Styles.
// Size of text in characters for truncate.
define('GENERIC_SIZE_TEXT', 50);
define('MENU_SIZE_TEXT', 20);

View File

@ -679,7 +679,7 @@ function agents_get_agents(
// Add the group filter to
$where = db_format_array_where_clause_sql($filter, 'AND', '('.$where_secondary.') AND ');
if ($where == '' && $where_secondary != '') {
$where = $where_secondary;
$where = '('.$where_secondary.')';
}
$where_nogroup = db_format_array_where_clause_sql(
@ -1181,6 +1181,10 @@ function agents_get_group_agents(
}
}
if (isset($search['all_agents'])) {
unset($search['all_agents']);
}
if (isset($search['string']) === true) {
$string = io_safe_input($search['string']);
$filter[] = "(nombre COLLATE utf8_general_ci LIKE '%$string%' OR direccion LIKE '%$string%')";

View File

@ -2380,118 +2380,6 @@ function get_alert_last_fire_timestamp_in_period($id_alert_module, $period, $dat
}
/**
* Insert in talert_special_days a new special day.
*
* @param date of special day.
* @param same day of the week.
* @param mixed A single value or array of values to insert (can be a multiple a mount of rows).
*
* @return mixed False in case of error or invalid values passed. Affected rows otherwise.
*/
function alerts_create_alert_special_day($date, $same_day, $values=false)
{
if (empty($date)) {
return false;
}
if (empty($same_day)) {
return false;
}
if (! is_array($values)) {
$values = [];
}
global $config;
$date_db = '';
switch ($config['dbtype']) {
case 'mysql':
$date_db = 'date';
break;
case 'oracle':
$date_db = '"date"';
break;
}
$values[$date_db] = $date;
$values['same_day'] = $same_day;
return @db_process_sql_insert('talert_special_days', $values);
}
/**
* Update a special day in talert_special_days.
*
* @param int special day Id.
* @param mixed Array of values to update.
*
* @return mixed False in case of error or invalid values passed. Affected rows otherwise
*/
function alerts_update_alert_special_day($id_special_day, $values)
{
$id_special_day = safe_int($id_special_day, 1);
if (empty($id_special_day)) {
return false;
}
if (! is_array($values)) {
return false;
}
return (@db_process_sql_update(
'talert_special_days',
$values,
['id' => $id_special_day]
)) !== false;
}
/**
* Delete a special day in talert_special_days.
*
* @param int special day Id.
*
* @return mixed False in case of error or invalid values passed. Affected rows otherwise
*/
function alerts_delete_alert_special_day($id_special_day)
{
$id_special_day = safe_int($id_special_day, 1);
if (empty($id_special_day)) {
return false;
}
return (@db_process_sql_delete(
'talert_special_days',
['id' => $id_special_day]
)) !== false;
}
/**
* Get a special day in talert_special_days.
*
* @param int special day Id.
*
* @return mixed False in case of error or invalid values passed. All row of the selected command otherwise
*/
function alerts_get_alert_special_day($id_special_day)
{
$id_special_day = safe_int($id_special_day, 1);
if (empty($id_special_day)) {
return false;
}
return db_get_row('talert_special_days', 'id', $id_special_day);
}
/**
* Get number of alert fired that an action is executed. Only fot non default alerts
*

View File

@ -55,6 +55,7 @@ enterprise_include_once('include/functions_alerts.php');
// Clases.
use PandoraFMS\Module;
use PandoraFMS\Enterprise\Cluster;
use PandoraFMS\SpecialDay;
/**
@ -14131,7 +14132,7 @@ function api_get_special_days($thrash1, $thrash2, $other, $thrash3)
*
* @param $thrash1 Don't use.
* @param $thrash2 Don't use.
* @param array $other it's array, $other as param is <special_day>;<same_day>;<description>;<id_group>; in this order
* @param array $other it's array, $other as param is <special_day>;<day_code>;<description>;<id_group>; in this order
* and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_<separator>)
* @param $thrash3 Don't use
*
@ -14150,6 +14151,7 @@ function api_set_create_special_day($thrash1, $thrash2, $other, $thrash3)
$same_day = $other['data'][1];
$description = $other['data'][2];
$idGroup = $other['data'][3];
$calendar_name = (isset($other['data'][4]) === true) ? $other['data'][4] : 'Default';
if (!check_acl($config['id_user'], $idGroup, 'LM', true)) {
returnError('forbidden', 'string');
@ -14186,17 +14188,51 @@ function api_set_create_special_day($thrash1, $thrash2, $other, $thrash3)
}
}
$values = [
'description' => $other['data'][2],
'id_group' => $other['data'][3],
$weekdays = [
'monday' => 1,
'tuesday' => 2,
'wednesday' => 3,
'thursday' => 4,
'friday' => 5,
'saturday' => 6,
'sunday' => 7,
'holiday' => 8,
];
$idSpecialDay = alerts_create_alert_special_day($special_day, $same_day, $values);
$day_code = (isset($weekdays[$same_day]) === true) ? $weekdays[$same_day] : 0;
if (is_error($idSpecialDay)) {
returnError('Special Day could not be created');
} else {
returnData('string', ['type' => 'string', 'data' => $idSpecialDay]);
if ($day_code === 0) {
returnError('Special Day could not be created. Same day doesn\'t exists.');
return;
}
$id_calendar = db_get_value_sql(
sprintf(
'SELECT id FROM talert_calendar WHERE name="%s"',
$calendar_name
)
);
if ($id_calendar === false) {
returnError('Special Day could not be created. Calendar doesn\'t exists.');
return;
}
try {
$sd = new SpecialDay();
$sd->date($special_day);
$sd->id_group($idGroup);
$sd->day_code($day_code);
$sd->description($description);
$sd->id_calendar($id_calendar);
$sd->save();
if ($sd->save() === true) {
returnData('string', ['type' => 'string', 'data' => $sd->id()]);
} else {
returnError('Special Day could not be created');
}
} catch (Exception $e) {
returnData('string', ['type' => 'string', 'data' => $e]);
}
}
@ -14693,7 +14729,7 @@ function api_set_recreate_service_modules($id, $id_agent)
*
* @param string $id Id of the special day to update.
* @param $thrash2 Don't use.
* @param array $other it's array, $other as param is <special_day>;<same_day>;<description>;<id_group>; in this order
* @param array $other it's array, $other as param is <special_day>;<day_code>;<description>;<id_group>; in this order
* and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_<separator>)
* @param $thrash3 Don't use
*
@ -14709,9 +14745,10 @@ function api_set_update_special_day($id_special_day, $thrash2, $other, $thrash3)
}
$special_day = $other['data'][0];
$same_day = $other['data'][1];
$day_code = $other['data'][1];
$description = $other['data'][2];
$idGroup = $other['data'][3];
$id_calendar = $other['data'][4];
if (!check_acl($config['id_user'], $idGroup, 'LM', true)) {
returnError('forbidden', 'string');
@ -14742,24 +14779,22 @@ function api_set_update_special_day($id_special_day, $thrash2, $other, $thrash3)
return;
}
$return = db_process_sql_update(
'talert_special_days',
[
'date' => $special_day,
'same_day' => $same_day,
'description' => $description,
'id_group' => $idGroup,
],
['id' => $id_special_day]
);
returnData(
'string',
[
'type' => 'string',
'data' => (int) ((bool) $return),
]
);
try {
$sd = new SpecialDay();
$sd->date($special_day);
$sd->id_group($idGroup);
$sd->day_code($day_code);
$sd->description($description);
$sd->id_calendar($id_calendar);
$sd->save();
if ($sd->save() === true) {
returnError('Special Day could not be updated');
} else {
returnData('string', ['type' => 'string', 'data' => $sd->id()]);
}
} catch (Exception $e) {
returnData('string', ['type' => 'string', 'data' => $e]);
}
}
@ -14805,13 +14840,20 @@ function api_set_delete_special_day($id_special_day, $thrash2, $thrash3, $thrash
return;
}
$return = alerts_delete_alert_special_day($id_special_day);
try {
$specialDay = new SpecialDay($id_special_day);
} catch (\Exception $e) {
if ($id > 0) {
returnError('The Special Day could not be deleted.');
}
if (is_error($return)) {
returnError('The Special Day could not be deleted.');
} else {
returnData('string', ['type' => 'string', 'data' => $return]);
return;
}
// Remove.
$specialDay->delete();
$return = 'success';
returnData('string', ['type' => 'string', 'data' => $return]);
}

View File

@ -620,7 +620,7 @@ function config_update_config()
$error_update[] = __('Admin LDAP login');
}
if (!config_update_value('ldap_admin_pass', get_parameter('ldap_admin_pass'))) {
if (!config_update_value('ldap_admin_pass', io_input_password(io_safe_output(get_parameter('ldap_admin_pass'))))) {
$error_update[] = __('Admin LDAP password');
}

View File

@ -2050,7 +2050,7 @@ function graphic_combined_module(
$width,
$height,
$color,
$module_name_list,
[],
$long_index,
ui_get_full_url(
'images/image_problem_area_small.png',

View File

@ -728,7 +728,8 @@ function html_print_select(
$simple_multiple_options=false,
$required=false,
$truncate_size=false,
$select2_enable=true
$select2_enable=true,
$multiple_select2=false
) {
$output = "\n";
@ -900,7 +901,8 @@ function html_print_select(
$select2 = 'select2_dark.min';
}
if ($multiple === false && $select2_enable === true) {
// Note that multiple_select2 is introduced as a workaround to overcome the pointless limitation of preventing "multiple" select inputs from using select2 library without affecting the existing calls to this function.
if ($multiple === false && $select2_enable === true || $multiple_select2 === true) {
if (is_ajax()) {
$output .= '<script src="';
$output .= ui_get_full_url(
@ -4030,15 +4032,19 @@ function html_print_input_file($name, $return=false, $options=false)
if ($options) {
if (isset($options['size'])) {
$output .= 'size="'.$options['size'].'"';
$output .= ' size="'.$options['size'].'"';
}
if (isset($options['disabled'])) {
$output .= 'disabled="disabled"';
$output .= ' disabled="disabled"';
}
if (isset($options['class'])) {
$output .= 'class="'.$options['class'].'"';
$output .= ' class="'.$options['class'].'"';
}
if (isset($options['required'])) {
$output .= ' required';
}
}

View File

@ -376,11 +376,11 @@ function menu_print_menu(&$menu)
if (isset($sub2['title'])) {
$sub_title = $sub2['title'];
} else {
$sub_title = '';
$sub_title = $sub2['text'];
}
$submenu2_list .= '<li class="'.$class.'" >';
$submenu2_list .= '<a href="'.$link.'"><div class="'.$sub_tree_class.'" title="'.$sub2['text'].'" >'.$sub2['text'].'</div></a></li>';
$submenu2_list .= '<a href="'.$link.'"><div class="'.$sub_tree_class.'" title="'.$sub_title.'" >'.$sub2['text'].'</div></a></li>';
$sub_title = '';
}
@ -658,13 +658,6 @@ function menu_get_sec_pages($sec, $menu_hash=false)
}
}
// If this value has various parameters, we only get the first.
$k = explode('&', $k);
$k = $k[0];
if (is_array($v['text']) === true) {
$v['text'] = $v['text'][0];
}
$sec2_array[$k] = $v['text'];
}
}
@ -760,12 +753,6 @@ function menu_pepare_acl_select_data($pages, $sec)
'gmodules' => 'godmode/modules/manage_network_templates',
'geventos' => 'godmode/events/events&amp;section=filter',
'gsetup' => 'godmode/setup/setup&section=general',
'messages' => [
'godmode/update_manager/update_manager&tab=online',
'godmode/update_manager/update_manager&tab=offline',
'godmode/update_manager/update_manager&tab=setup',
],
];
foreach ($exclude_pages as $exclude_sec => $sec2) {

View File

@ -177,13 +177,8 @@ function servers_get_performance()
WHERE tagente_modulo.id_agente_modulo = tagente_estado.id_agente_modulo
AND tagente.id_agente = tagente_estado.id_agente
AND tagente_modulo.disabled = 0
AND tagente_modulo.id_modulo <> 0
AND delete_pending = 0
AND (utimestamp > 0
OR (id_tipo_modulo = 100
OR (id_tipo_modulo > 21
AND id_tipo_modulo < 23)
)
)
AND tagente.disabled = 0
GROUP BY tagente_modulo.id_modulo'
);

View File

@ -105,64 +105,119 @@ function tactical_get_data($id_user=false, $user_strict=false, $acltags, $return
if (is_metaconsole() && !empty($list_groups)) {
$cache_table = 'tmetaconsole_agent';
$sql_stats = "SELECT id_grupo, COUNT(id_agente) AS agents_total,
SUM(total_count) AS monitors_total,
SUM(normal_count) AS monitors_ok,
SUM(warning_count) AS monitors_warning,
SUM(critical_count) AS monitors_critical,
SUM(unknown_count) AS monitors_unknown,
SUM(notinit_count) AS monitors_not_init,
SUM(fired_count) AS alerts_fired
FROM $cache_table
WHERE disabled = 0
AND id_grupo IN ($user_groups_ids)
GROUP BY id_grupo";
if (users_is_admin() === false) {
$user_groups_ids_array = explode(',', $user_groups_ids);
$user_group_children_ids = [];
foreach ($user_groups_ids_array as $user_group_id) {
$group_children_ids = groups_get_children_ids($user_group_id);
$user_group_children_ids = array_merge($user_group_children_ids, $group_children_ids);
}
$user_groups_ids = implode(',', array_unique($user_group_children_ids));
}
$sql_stats = sprintf(
'SELECT tma.id_grupo, COUNT(tma.id_agente) AS agents_total,
SUM(tma.total_count) AS monitors_total,
SUM(tma.normal_count) AS monitors_ok,
SUM(tma.warning_count) AS monitors_warning,
SUM(tma.critical_count) AS monitors_critical,
SUM(tma.unknown_count) AS monitors_unknown,
SUM(tma.notinit_count) AS monitors_not_init,
SUM(tma.fired_count) AS alerts_fired
FROM tmetaconsole_agent tma
LEFT JOIN tmetaconsole_agent_secondary_group tmasg
ON tma.id_agente = tmasg.id_agent
WHERE tma.disabled = 0
AND tma.id_grupo IN (%s) OR tmasg.id_group IN (%s)
GROUP BY tma.id_grupo',
$user_groups_ids,
$user_groups_ids
);
$data_stats = db_get_all_rows_sql($sql_stats);
$sql_stats_unknown = "SELECT id_grupo, COUNT(id_agente) AS agents_unknown
FROM $cache_table
WHERE disabled = 0
AND id_grupo IN ($user_groups_ids)
AND critical_count = 0
AND warning_count = 0
AND unknown_count > 0
GROUP BY id_grupo";
$sql_stats_unknown = sprintf(
'SELECT tma.id_grupo, COUNT(tma.id_agente) AS agents_unknown
FROM tmetaconsole_agent tma
LEFT JOIN tmetaconsole_agent_secondary_group tmasg
ON tma.id_agente = tmasg.id_agent
WHERE tma.disabled = 0
AND (tma.id_grupo IN (%s) OR tmasg.id_group IN (%s))
AND tma.critical_count = 0
AND tma.warning_count = 0
AND tma.unknown_count > 0
GROUP BY tma.id_grupo',
$user_groups_ids,
$user_groups_ids
);
$data_stats_unknown = db_get_all_rows_sql($sql_stats_unknown);
$sql_stats_not_init = "SELECT id_grupo, COUNT(id_agente) AS agents_not_init
FROM $cache_table
WHERE disabled = 0
AND id_grupo IN ($user_groups_ids)
AND (total_count = 0 OR total_count = notinit_count)
GROUP BY id_grupo";
$sql_stats_not_init = sprintf(
'SELECT tma.id_grupo, COUNT(tma.id_agente) AS agents_not_init
FROM tmetaconsole_agent tma
LEFT JOIN tmetaconsole_agent_secondary_group tmasg
ON tma.id_agente = tmasg.id_agent
WHERE tma.disabled = 0
AND (tma.id_grupo IN (%s) OR tmasg.id_group IN (%s))
AND (tma.total_count = 0 OR tma.total_count = tma.notinit_count)
GROUP BY tma.id_grupo',
$user_groups_ids,
$user_groups_ids
);
$data_stats_not_init = db_get_all_rows_sql($sql_stats_not_init);
$sql_stats_ok = "SELECT id_grupo, COUNT(id_agente) AS agents_ok
FROM $cache_table
WHERE disabled = 0
AND id_grupo IN ($user_groups_ids)
AND critical_count = 0
AND warning_count = 0
AND unknown_count = 0
AND normal_count > 0
GROUP BY id_grupo";
$sql_stats_ok = sprintf(
'SELECT tma.id_grupo, COUNT(tma.id_agente) AS agents_ok
FROM tmetaconsole_agent tma
LEFT JOIN tmetaconsole_agent_secondary_group tmasg
ON tma.id_agente = tmasg.id_agent
WHERE tma.disabled = 0
AND (tma.id_grupo IN (%s) OR tmasg.id_group IN (%s))
AND tma.critical_count = 0
AND tma.warning_count = 0
AND tma.unknown_count = 0
AND tma.normal_count > 0
GROUP BY tma.id_grupo',
$user_groups_ids,
$user_groups_ids
);
$data_stats_ok = db_get_all_rows_sql($sql_stats_ok);
$sql_stats_warning = "SELECT id_grupo, COUNT(id_agente) AS agents_warning
FROM $cache_table
WHERE disabled = 0
AND id_grupo IN ($user_groups_ids)
AND critical_count = 0
AND warning_count > 0
GROUP BY id_grupo";
$sql_stats_warning = sprintf(
'SELECT tma.id_grupo, COUNT(tma.id_agente) AS agents_warning
FROM tmetaconsole_agent tma
LEFT JOIN tmetaconsole_agent_secondary_group tmasg
ON tma.id_agente = tmasg.id_agent
WHERE tma.disabled = 0
AND (tma.id_grupo IN (%s) OR tmasg.id_group IN (%s))
AND tma.critical_count = 0
AND tma.warning_count > 0
GROUP BY tma.id_grupo',
$user_groups_ids,
$user_groups_ids
);
$data_stats_warning = db_get_all_rows_sql($sql_stats_warning);
$sql_stats_critical = "SELECT id_grupo, COUNT(id_agente) AS agents_critical
FROM $cache_table
WHERE disabled = 0
AND id_grupo IN ($user_groups_ids)
AND critical_count > 0
GROUP BY id_grupo";
$sql_stats_critical = sprintf(
'SELECT tma.id_grupo, COUNT(tma.id_agente) AS agents_critical
FROM tmetaconsole_agent tma
LEFT JOIN tmetaconsole_agent_secondary_group tmasg
ON tma.id_agente = tmasg.id_agent
WHERE tma.disabled = 0
AND (tma.id_grupo IN (%s) OR tmasg.id_group IN (%s))
AND tma.critical_count > 0
GROUP BY tma.id_grupo',
$user_groups_ids,
$user_groups_ids
);
$data_stats_critical = db_get_all_rows_sql($sql_stats_critical);
if (!empty($data_stats)) {
@ -292,7 +347,7 @@ function tactical_get_data($id_user=false, $user_strict=false, $acltags, $return
$list['_total_agents_'] = $total_agentes[0]['total_agents'];
$list['_monitor_alerts_fire_count_'] = $group_stat[0]['alerts_fired'];
$list['_monitors_alerts_'] = tactical_monitor_alerts(explode(',', $user_groups_ids), $user_strict, explode(',', $user_groups_ids));
$list['_monitors_alerts_'] = tactical_monitor_alerts($user_strict);
// Get total count of monitors for this group, except disabled.
$list['_monitor_checks_'] = ($list['_monitors_not_init_'] + $list['_monitors_unknown_'] + $list['_monitors_warning_'] + $list['_monitors_critical_'] + $list['_monitors_ok_']);
@ -411,12 +466,14 @@ function tactical_get_data($id_user=false, $user_strict=false, $acltags, $return
}
$list['_monitors_alerts_fired_'] = tactical_monitor_fired_alerts(explode(',', $user_groups_ids), $user_strict, explode(',', $user_groups_ids));
$list['_monitors_alerts_'] = tactical_monitor_alerts(explode(',', $user_groups_ids), $user_strict, explode(',', $user_groups_ids));
$list['_monitors_alerts_'] = tactical_monitor_alerts($user_strict);
$total_agentes = agents_get_agents(false, ['count(DISTINCT id_agente) as total_agents'], 'AR', false, false, 1);
$list['_total_agents_'] = $total_agentes[0]['total_agents'];
$list['_monitor_checks_'] = ($list['_monitors_not_init_'] + $list['_monitors_unknown_'] + $list['_monitors_warning_'] + $list['_monitors_critical_'] + $list['_monitors_ok_']);
$list['_monitor_total_'] = ($list['_monitors_not_init_'] + $list['_monitors_unknown_'] + $list['_monitors_warning_'] + $list['_monitors_critical_'] + $list['_monitors_ok_']);
$list['_monitor_checks_'] = ($list['_monitors_unknown_'] + $list['_monitors_warning_'] + $list['_monitors_critical_'] + $list['_monitors_ok_']);
// Calculate not_normal monitors
$list['_monitor_not_normal_'] = ($list['_monitor_checks_'] - $list['_monitors_ok_']);
@ -442,42 +499,33 @@ function tactical_status_modules_agents($id_user=false, $user_strict=false, $acc
}
function tactical_monitor_alerts($group_array, $strict_user=false, $id_group_strict=false)
function tactical_monitor_alerts($strict_user=false)
{
// If there are not groups to query, we jump to nextone
if (empty($group_array)) {
return 0;
} else if (!is_array($group_array)) {
$group_array = [$group_array];
}
$groups = users_get_groups($config['id_user'], 'AR', false);
$id_groups = array_keys($groups);
$group_clause = implode(',', $group_array);
$group_clause = '('.$group_clause.')';
if ($strict_user) {
$group_clause_strict = implode(',', $id_group_strict);
$group_clause_strict = '('.$group_clause_strict.')';
$sql = "SELECT COUNT(talert_template_modules.id)
FROM talert_template_modules, tagente_modulo, tagente_estado, tagente
WHERE tagente.id_grupo IN $group_clause_strict AND tagente_modulo.id_agente = tagente.id_agente
AND tagente.disabled = 0 AND tagente_modulo.disabled = 0
AND talert_template_modules.disabled = 0
AND tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo
AND talert_template_modules.id_agent_module = tagente_modulo.id_agente_modulo";
$count = db_get_sql($sql);
return $count;
if (empty($id_groups)) {
$where_clause .= ' AND (1 = 0) ';
} else {
// TODO REVIEW ORACLE AND POSTGRES
return db_get_sql(
"SELECT COUNT(talert_template_modules.id)
FROM talert_template_modules, tagente_modulo, tagente_estado, tagente
WHERE tagente.id_grupo IN $group_clause AND tagente_modulo.id_agente = tagente.id_agente
AND tagente.disabled = 0 AND tagente_modulo.disabled = 0
AND talert_template_modules.disabled = 0
AND tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo
AND talert_template_modules.id_agent_module = tagente_modulo.id_agente_modulo"
$where_clause .= sprintf(
' AND id_agent_module IN (
SELECT tam.id_agente_modulo
FROM tagente_modulo tam
WHERE tam.id_agente IN (SELECT ta.id_agente
FROM tagente ta LEFT JOIN tagent_secondary_group tasg ON
ta.id_agente = tasg.id_agent
WHERE (ta.id_grupo IN (%s) OR tasg.id_group IN (%s)))) ',
implode(',', $id_groups),
implode(',', $id_groups)
);
}
$filter_alert = [];
$filter_alert['disabled'] = 'all_enabled';
$alert_count = get_group_alerts($id_groups, $filter_alert, false, $where_clause, false, false, false, true, $strict_user);
return $alert_count;
}

View File

@ -3591,19 +3591,87 @@ function ui_print_datatable(array $parameters)
// Order.
$err_msg = '<div id="error-'.$table_id.'"></div>';
$output = $err_msg.$filter.$extra.$table.$js;
if (is_ajax() === false) {
ui_require_css_file('datatables.min', 'include/styles/js/');
ui_require_css_file('tables');
if (is_metaconsole()) {
ui_require_css_file('tables_meta', ENTERPRISE_DIR.'/include/styles/');
}
ui_require_css_file('datatables.min', 'include/styles/js/');
ui_require_css_file('tables');
if (is_metaconsole()) {
ui_require_css_file('tables_meta', ENTERPRISE_DIR.'/include/styles/');
ui_require_javascript_file('datatables.min');
ui_require_javascript_file('buttons.dataTables.min');
ui_require_javascript_file('dataTables.buttons.min');
ui_require_javascript_file('buttons.html5.min');
ui_require_javascript_file('buttons.print.min');
} else {
// Load tables.css.
$output .= '<link rel="stylesheet" href="';
$output .= ui_get_full_url(
'include/styles/tables.css',
false,
false,
false
);
$output .= '"/>';
if (is_metaconsole() === true) {
// Load tables_meta.css.
$output .= '<link rel="stylesheet" href="';
$output .= ui_get_full_url(
ENTERPRISE_DIR.'/include/styles/tables_meta.css',
false,
false,
false
);
$output .= '"/>';
}
// Load datatables.js.
$output .= '<script src="';
$output .= ui_get_full_url(
'include/javascript/datatables.min.js',
false,
false,
false
);
$output .= '" type="text/javascript"></script>';
// Load buttons.dataTables.min.js.
$output .= '<script src="';
$output .= ui_get_full_url(
'include/javascript/buttons.dataTables.min.js',
false,
false,
false
);
$output .= '" type="text/javascript"></script>';
// Load dataTables.buttons.min.js.
$output .= '<script src="';
$output .= ui_get_full_url(
'include/javascript/dataTables.buttons.min.js',
false,
false,
false
);
$output .= '" type="text/javascript"></script>';
// Load buttons.html5.min.js.
$output .= '<script src="';
$output .= ui_get_full_url(
'include/javascript/buttons.html5.min.js',
false,
false,
false
);
$output .= '" type="text/javascript"></script>';
// Load buttons.print.min.js.
$output .= '<script src="';
$output .= ui_get_full_url(
'include/javascript/buttons.print.min.js',
false,
false,
false
);
$output .= '" type="text/javascript"></script>';
}
ui_require_javascript_file('datatables.min');
ui_require_javascript_file('buttons.dataTables.min');
ui_require_javascript_file('dataTables.buttons.min');
ui_require_javascript_file('buttons.html5.min');
ui_require_javascript_file('buttons.print.min');
if (isset($parameters['return']) && $parameters['return'] == true) {
// Compat.
$parameters['print'] = false;

View File

@ -301,6 +301,7 @@ function users_get_groups(
$search=''
) {
static $group_cache = [];
$filter = '';
// Added users_group_cache to avoid unnecessary proccess on massive calls...
@ -342,13 +343,6 @@ function users_get_groups(
$query = 'SELECT * FROM tgrupo ORDER BY nombre';
$raw_groups = db_get_all_rows_sql($query);
if (empty($search) === false) {
$filter = sprintf(
' AND lower(tgrupo.nombre) like lower("%%%s%%")',
$search
);
}
$query = sprintf(
"SELECT tgrupo.*, tperfil.*, tusuario_perfil.tags, tusuario_perfil.no_hierarchy FROM tgrupo, tusuario_perfil, tperfil
WHERE (tgrupo.id_grupo = tusuario_perfil.id_grupo OR tusuario_perfil.id_grupo = 0)
@ -451,6 +445,16 @@ function users_get_groups(
}
}
// Search filter.
if (empty($search) === false) {
$user_groups = array_filter(
$user_groups,
function ($group) use ($search) {
return (bool) preg_match('/'.$search.'/i', $group['nombre']);
}
);
}
$users_group_cache[$users_group_cache_key] = $user_groups;
return $user_groups;

View File

@ -225,14 +225,14 @@ function d3_bullet_chart(
.bullet .range.s2 { fill: #ccc; }
.bullet .measure.s0 { fill: steelblue; }
.bullet .measure.s1 { fill: steelblue; }
.bullet .title { font-size: 7pt; font-weight: bold; text-align:left; }
.bullet .title { font-size: 9pt; font-weight: bold; text-align:left; cursor: help;}
.bullet .subtitle { fill: #999; font-size: 7pt;}
.bullet g text { font-size:'.$font_size.'pt; '.$invert_color.' }
</style>
<script language="javascript" type="text/javascript">
var margin = {top: 5, right: 40, bottom: 20, left: 120};
var margin = {top: 5, right: 40, bottom: 20, left: 130};
var width = ('.$width.'+10);
var height = '.$height.'- margin.top - margin.bottom;
@ -251,13 +251,14 @@ function d3_bullet_chart(
$name = io_safe_output($data['nombre']);
}
$name = ui_print_truncate_text($name, 15, false, true, false, '...', false);
$long_name = $name;
$name = ui_print_truncate_text($name, 20, false, true, false, '...', false);
$marker = '';
if ($data['value'] == 0) {
$marker = ', 0';
}
$temp[] = '{"title":"'.$name.'","subtitle":"'.$data['unit'].'",
$temp[] = '{"longTitle":"'.$long_name.'", "title":"'.$name.'","subtitle":"'.$data['unit'].'",
"ranges":['.((float) $data['max']).'],"measures":['.$data['value'].'],
"markers":['.$data['min_warning'].','.$data['min_critical'].$marker.']}';
}
@ -276,12 +277,19 @@ function d3_bullet_chart(
.call(chart);
var title = svg.append("g")
.attr("width", "120px")
.style("text-anchor", "end")
.attr("transform", "translate(-10, 15)");
title.append("text")
.attr("class", "'.$font.' invert_filter")
.text(function(d) { return d.title; });
.attr("class", "title '.$font.' invert_filter")
.attr("textLength","120")
.attr("lengthAdjust", "spacingAndGlyphs")
.text(function(d) { return d.title; })
.append("title")
.text(function(d) { return d.longTitle; });
title.append("text")
.attr("class", "subtitle")

View File

@ -1,5 +1,4 @@
/* globals $ */
/* globals $ confirmDialog uniqId showMsg*/
function parse_alert_command(command, classs) {
if (classs == "recovery") {
classs = "fields_recovery";
@ -36,21 +35,64 @@ function parse_alert_command(command, classs) {
return command;
}
// eslint-disable-next-line no-unused-vars
function render_command_preview(original_command) {
$("#textarea_command_preview").html(
parse_alert_command(original_command, "")
);
}
// eslint-disable-next-line no-unused-vars
function render_command_recovery_preview(original_command) {
$("#textarea_command_recovery_preview").html(
parse_alert_command(original_command, "recovery")
);
}
// eslint-disable-next-line no-unused-vars
function render_command_description(command_description) {
if (command_description != "") {
command_description = "<br>" + command_description;
}
$("#command_description").html(command_description);
}
// eslint-disable-next-line no-unused-vars
function load_templates_alerts_special_days(settings) {
confirmDialog({
title: settings.title,
message: function() {
var id = "div-" + uniqId();
$.ajax({
method: "post",
url: settings.url,
data: {
page: settings.page,
method: "drawAlertTemplates",
date: settings.date,
id_group: settings.id_group,
day_code: settings.day_code,
id_calendar: settings.id_calendar
},
datatype: "html",
success: function(data) {
$("#" + id)
.empty()
.html(data);
},
error: function(e) {
showMsg(e);
}
});
return "<div id ='" + id + "'>" + settings.loading + "</div>";
},
ok: settings.btn_ok_text,
cancel: settings.btn_cancel_text,
onAccept: function() {
$("#" + settings.name_form).submit();
},
size: 750,
maxHeight: 500
});
}

View File

@ -0,0 +1,274 @@
<?php
// phpcs:disable Squiz.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
/**
* Calendar entity class.
*
* @category Class
* @package Pandora FMS
* @subpackage OpenSource
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2021 Artica Soluciones Tecnologicas
* Please see http://pandorafms.org for full contribution list
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation for version 2.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* ============================================================================
*/
// Begin.
namespace PandoraFMS;
/**
* PandoraFMS agent entity.
*/
class Calendar extends Entity
{
/**
* Search Calendar.
*
* @param array $filter Filters.
*
* @return array Rows.
*/
public static function search(array $filter)
{
$table = '`talert_calendar`';
$rows = \db_get_all_rows_filter(
$table,
$filter,
['`talert_calendar`.*']
);
return $rows;
}
/**
* Builds a PandoraFMS\Calendar object from given id.
*
* @param integer $id Id special day.
*/
public function __construct(?int $id=null)
{
$table = 'talert_calendar';
$filter = ['id' => $id];
$this->existsInDB = false;
if (is_numeric($id) === true
&& $id > 0
) {
parent::__construct(
$table,
$filter,
null,
false
);
$this->existsInDB = true;
} else {
// Create empty skel.
parent::__construct($table, null);
}
}
/**
* Saves current definition to database.
*
* @return mixed Affected rows of false in case of error.
* @throws \Exception On error.
*/
public function save()
{
if ($this->fields['id'] > 0) {
// Update.
$updates = $this->fields;
$rs = \db_process_sql_update(
$this->table,
$updates,
['id' => $this->fields['id']]
);
if ($rs === false) {
global $config;
throw new \Exception(
__METHOD__.' error: '.$config['dbconnection']->error
);
}
} else {
// Creation.
$inserts = $this->fields;
// Clean null fields.
foreach ($inserts as $k => $v) {
if ($v === null) {
unset($inserts[$k]);
}
}
$rs = \db_process_sql_insert(
$this->table,
$inserts
);
if ($rs === false) {
global $config;
throw new \Exception(
__METHOD__.' error: '.$config['dbconnection']->error
);
}
$this->fields['id'] = $rs;
}
return true;
}
/**
* Remove this calendar.
*
* @return void
*/
public function delete()
{
if ($this->existsInDB === true) {
\db_process_delete_temp(
$this->table,
'id',
$this->fields['id']
);
}
}
/**
* Returns an array with all calendar filtered.
*
* @param array $fields Fields array or 'count' keyword to retrieve count.
* @param array $filter Filters to be applied.
* @param boolean $count Retrieve count of items instead results.
* @param integer $offset Offset (pagination).
* @param integer $limit Limit (pagination).
* @param string $order Sort order.
* @param string $sort_field Sort field.
* @param boolean $select_options Array options for select.
*
* @return array With all results.
* @throws \Exception On error.
*/
public static function calendars(
array $fields=[ '`talert_calendar`.*' ],
array $filter=[],
bool $count=false,
?int $offset=null,
?int $limit=null,
?string $order=null,
?string $sort_field=null,
?bool $select_options=false
) {
$sql_filters = [];
$order_by = '';
$pagination = '';
if (isset($filter['free_search']) === true
&& empty($filter['free_search']) === false
) {
$sql_filters[] = vsprintf(
' AND (`talert_calendar`.`name` like "%%%s%%"
OR `talert_calendar`.`description` like "%%%s%%")',
array_fill(0, 2, $filter['free_search'])
);
}
if (isset($order) === true) {
$dir = 'asc';
if ($order === 'desc') {
$dir = 'desc';
};
if (in_array(
$sort_field,
[ 'name' ]
) === true
) {
$order_by = sprintf(
'ORDER BY `talert_calendar`.`%s` %s',
$sort_field,
$dir
);
} else {
// Custom field order.
$order_by = sprintf(
'ORDER BY `%s` %s',
$sort_field,
$dir
);
}
}
if (isset($limit) === true && $limit > 0
&& isset($offset) === true && $offset >= 0
) {
$pagination = sprintf(
' LIMIT %d OFFSET %d ',
$limit,
$offset
);
}
$sql = sprintf(
'SELECT %s
FROM `talert_calendar`
WHERE 1=1
%s
%s
%s',
join(',', $fields),
join(' ', $sql_filters),
$order_by,
$pagination
);
if ($count === true) {
$sql = sprintf('SELECT count(*) as n FROM ( %s ) tt', $sql);
return ['count' => \db_get_value_sql($sql)];
}
$return = \db_get_all_rows_sql($sql);
if (is_array($return) === false) {
return [];
}
if ($select_options === true) {
$return = array_reduce(
$return,
function ($carry, $item) {
$carry[$item['id']] = $item['name'];
return $carry;
}
);
}
return $return;
}
}

View File

@ -519,8 +519,6 @@ class EventsListWidget extends Widget
}
}
$hours = ($this->values['maxHours'] * SECONDS_1HOUR);
// Put hours in seconds.
$filter = [];
$order = [];
@ -546,7 +544,7 @@ class EventsListWidget extends Widget
}
} else {
// Filtering.
$filter['event_view_hr'] = $hours;
$filter['event_view_hr'] = $this->values['maxHours'];
// Group.
$filter['id_group_filter'] = $this->values['groupId'];

View File

@ -0,0 +1,310 @@
<?php
// phpcs:disable Squiz.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
/**
* Special day entity class.
*
* @category Class
* @package Pandora FMS
* @subpackage OpenSource
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2021 Artica Soluciones Tecnologicas
* Please see http://pandorafms.org for full contribution list
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation for version 2.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* ============================================================================
*/
// Begin.
namespace PandoraFMS;
/**
* PandoraFMS agent entity.
*/
class SpecialDay extends Entity
{
/**
* Builds a PandoraFMS\SpecialDay object from given id.
*
* @param integer $id Id special day.
*/
public function __construct(?int $id=null)
{
$table = 'talert_special_days';
$filter = ['id' => $id];
$this->existsInDB = false;
if (is_numeric($id) === true
&& $id > 0
) {
parent::__construct(
$table,
$filter,
null,
false
);
$this->existsInDB = true;
} else {
// Create empty skel.
parent::__construct($table, null);
}
}
/**
* Saves current definition to database.
*
* @return mixed Affected rows of false in case of error.
* @throws \Exception On error.
*/
public function save()
{
if ($this->fields['id'] > 0) {
// Update.
$updates = $this->fields;
$rs = \db_process_sql_update(
$this->table,
$updates,
['id' => $this->fields['id']]
);
if ($rs === false) {
global $config;
throw new \Exception(
__METHOD__.' error: '.$config['dbconnection']->error
);
}
} else {
// Creation.
$inserts = $this->fields;
// Clean null fields.
foreach ($inserts as $k => $v) {
if ($v === null) {
unset($inserts[$k]);
}
}
$rs = \db_process_sql_insert(
$this->table,
$inserts
);
if ($rs === false) {
global $config;
throw new \Exception(
__METHOD__.' error: '.$config['dbconnection']->error
);
}
$this->fields['id'] = $rs;
}
return true;
}
/**
* Remove this Special day.
*
* @return void
*/
public function delete()
{
if ($this->existsInDB === true) {
\db_process_delete_temp(
$this->table,
'id',
$this->fields['id']
);
}
}
/**
* Returns an array with all special days filtered.
*
* @param array $fields Fields array or 'count' keyword to retrieve count.
* @param array $filter Filters to be applied.
* @param boolean $count Retrieve count of items instead results.
* @param integer $offset Offset (pagination).
* @param integer $limit Limit (pagination).
* @param string $order Sort order.
* @param string $sort_field Sort field.
* @param boolean $reduce Reduce result [Year][month][day].
*
* @return array With all results.
* @throws \Exception On error.
*/
public static function specialDays(
array $fields=[ '`talert_special_days`.*' ],
array $filter=[],
bool $count=false,
?int $offset=null,
?int $limit=null,
?string $order=null,
?string $sort_field=null,
?bool $reduce=false
) {
$sql_filters = [];
$order_by = '';
$pagination = '';
if (isset($filter['free_search']) === true
&& empty($filter['free_search']) === false
) {
$sql_filters[] = vsprintf(
' AND `talert_special_days`.`name` like "%%%s%%"',
array_fill(0, 1, $filter['free_search'])
);
}
if (isset($filter['id_calendar']) === true
&& empty($filter['id_calendar']) === false
) {
$sql_filters[] = sprintf(
' AND `talert_special_days`.`id_calendar` = %d',
$filter['id_calendar']
);
}
if (isset($filter['date']) === true
&& empty($filter['date']) === false
) {
$sql_filters[] = sprintf(
' AND `talert_special_days`.`date` >= "%s"',
$filter['date']
);
}
if (isset($filter['futureDate']) === true
&& empty($filter['futureDate']) === false
) {
$sql_filters[] = sprintf(
' AND `talert_special_days`.`date` <= "%s"',
$filter['futureDate']
);
}
if (isset($filter['id_group']) === true
&& empty($filter['id_group']) === false
) {
$sql_filters[] = sprintf(
' AND `talert_special_days`.`id_group` IN ("%s")',
implode(',', $filter['id_group'])
);
}
if (isset($filter['date_match']) === true
&& empty($filter['date_match']) === false
) {
$sql_filters[] = sprintf(
' AND `talert_special_days`.`date` = "%s"',
$filter['date_match']
);
}
if (isset($filter['day_code']) === true
&& empty($filter['day_code']) === false
) {
$sql_filters[] = sprintf(
' AND `talert_special_days`.`day_code` = %d',
$filter['day_code']
);
}
if (isset($order) === true) {
$dir = 'asc';
if ($order === 'desc') {
$dir = 'desc';
};
if (in_array(
$sort_field,
[ 'name' ]
) === true
) {
$order_by = sprintf(
'ORDER BY `talert_special_days`.`%s` %s',
$sort_field,
$dir
);
} else {
// Custom field order.
$order_by = sprintf(
'ORDER BY `%s` %s',
$sort_field,
$dir
);
}
}
if (isset($limit) === true && $limit > 0
&& isset($offset) === true && $offset >= 0
) {
$pagination = sprintf(
' LIMIT %d OFFSET %d ',
$limit,
$offset
);
}
$sql = sprintf(
'SELECT %s
FROM `talert_special_days`
WHERE 1=1
%s
%s
%s',
join(',', $fields),
join(' ', $sql_filters),
$order_by,
$pagination
);
if ($count === true) {
$sql = sprintf('SELECT count(*) as n FROM ( %s ) tt', $sql);
return ['count' => \db_get_value_sql($sql)];
}
$return = \db_get_all_rows_sql($sql);
if (is_array($return) === false) {
return [];
}
if ($reduce === true) {
$return = array_reduce(
$return,
function ($carry, $item) {
$year = date('Y', strtotime($item['date']));
$month = date('n', strtotime($item['date']));
$day = date('j', strtotime($item['date']));
$carry[$year][$month][$day][] = $item;
return $carry;
}
);
}
return $return;
}
}

View File

@ -292,3 +292,54 @@ div#rules.show {
#rules select.click-list-elements:focus {
outline-color: transparent;
}
#icalendar-special-days {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: space-between;
align-items: center;
background-color: #fff;
border: 1px solid #e1e1e1;
border-radius: 5px;
padding: 20px 50px;
}
#icalendar-special-days ul.wizard {
flex: 0;
}
#icalendar-special-days ul.wizard:first-child {
flex: 1 1 100%;
display: flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: space-between;
align-items: center;
margin-right: 80px;
}
.note-special-day {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: space-between;
align-items: center;
align-content: center;
}
.note-special-day div {
display: flex;
flex-direction: row;
align-items: center;
align-content: center;
}
.note-special-day div a.tip {
margin: 0px;
margin-right: 2px;
}
.note-special-day div a.tip > img {
margin: 0px;
}

View File

@ -3279,6 +3279,13 @@ td.empty_field {
width: 96%;
}
#update_action-
> .select2-container--default
.select2-results
> .select2-results__options {
max-height: 125px !important;
}
/* Policies styles */
table#policy_modules td * {

View File

@ -128,8 +128,8 @@
</div>
<div style='height: 10px'>
<?php
$version = '7.0NG.758';
$build = '211115';
$version = '7.0NG.758.1';
$build = '211124';
$banner = "v$version Build $build";
error_reporting(0);

View File

@ -391,7 +391,7 @@ $sql_conditions_tags = '';
if (!users_is_admin()) {
$sql_conditions_tags = tags_get_acl_tags(
$config['id_user'],
$ag_group,
($recursion) ? $all_groups : $ag_group,
'AR',
'module_condition',
'AND',

View File

@ -479,7 +479,7 @@ if ($load_filter_id === 0) {
// Do not load the user filter if we come from the 24h event graph.
$from_event_graph = get_parameter('filter[from_event_graph]', $filter['from_event_graph']);
if ($loaded_filter !== false && $from_event_graph != 1) {
if ($loaded_filter !== false && $from_event_graph != 1 && !isset($fb64)) {
$filter = events_get_event_filter($loaded_filter['id_filter']);
if ($filter !== false) {
$id_group = $filter['id_group'];

View File

@ -78,6 +78,10 @@ $integria_types_csv = integria_api_call(null, null, null, null, 'get_types');
get_array_from_csv_data_pair($integria_types_csv, $integria_types_values);
$integria_resolution_csv = integria_api_call(null, null, null, null, 'get_incidents_resolutions');
get_array_from_csv_data_pair($integria_resolution_csv, $integria_resolution_values);
$event_id = (int) get_parameter('from_event');
$incident_id_edit = (int) get_parameter('incident_id');
$create_incident = (bool) get_parameter('create_incident', 0);
@ -88,6 +92,7 @@ $incident_owner = get_parameter('owner');
$incident_type = (int) get_parameter('type');
$incident_creator = get_parameter('creator');
$incident_status = (int) get_parameter('status');
$incident_resolution = (int) get_parameter('resolution');
$incident_title = events_get_field_value_by_event_id($event_id, get_parameter('incident_title'));
$incident_content = events_get_field_value_by_event_id($event_id, get_parameter('incident_content'));
$file_description = get_parameter('file_description');
@ -98,8 +103,13 @@ $incident_content = str_replace(',', ':::', $incident_content);
// Perform action.
if ($create_incident === true) {
// Disregard incident resolution unless status is 'closed'.
if ($incident_status !== 7) {
$incident_resolution = 0;
}
// Call Integria IMS API method to create an incident.
$result_api_call = integria_api_call(null, null, null, null, 'create_incident', [$incident_title, $incident_group_id, $incident_criticity_id, $incident_content, '', $incident_type, '', $incident_owner, '0', $incident_status], false, '', ',');
$result_api_call = integria_api_call(null, null, null, null, 'create_incident', [$incident_title, $incident_group_id, $incident_criticity_id, $incident_content, '', $incident_type, '', $incident_owner, '0', $incident_status, '', $incident_resolution], false, '', ',');
if ($userfile !== '' && $result_api_call !== false) {
integriaims_upload_file('userfile', $result_api_call, $file_description);
@ -114,8 +124,13 @@ if ($create_incident === true) {
__('Could not be created in Integria IMS')
);
} else if ($update_incident === true) {
// Disregard incident resolution unless status is 'closed'.
if ($incident_status !== 7) {
$incident_resolution = 0;
}
// Call Integria IMS API method to update an incident.
$result_api_call = integria_api_call(null, null, null, null, 'update_incident', [$incident_id_edit, $incident_title, $incident_content, '', $incident_group_id, $incident_criticity_id, 0, $incident_status, $incident_owner, 0, $incident_type], false, '', ',');
$result_api_call = integria_api_call(null, null, null, null, 'update_incident', [$incident_id_edit, $incident_title, $incident_content, '', $incident_group_id, $incident_criticity_id, $incident_resolution, $incident_status, $incident_owner, 0, $incident_type], false, '', ',');
if ($userfile !== '') {
integriaims_upload_file('userfile', $incident_id_edit, $file_description);
@ -161,8 +176,8 @@ $table->style[0] = 'width: 33%; padding-right: 50px; padding-left: 100px;';
$table->style[1] = 'width: 33%; padding-right: 50px; padding-left: 50px;';
$table->style[2] = 'width: 33%; padding-right: 100px; padding-left: 50px;';
$table->colspan[0][0] = 2;
$table->colspan[3][0] = 3;
$table->colspan[5][0] = 3;
$table->colspan[4][0] = 3;
$table->colspan[6][0] = 3;
$help_macros = isset($_GET['from_event']) ? ui_print_help_icon('response_macros', true) : '';
@ -174,6 +189,7 @@ if ($update) {
$input_value_criticity = $incident_details[7];
$input_value_owner = $incident_details[5];
$input_value_content = $incident_details[4];
$input_value_resolution = $incident_details[12];
} else if (isset($_GET['from_event'])) {
$input_value_title = $config['cr_incident_title'];
$input_value_type = $config['cr_incident_type'];
@ -182,6 +198,7 @@ if ($update) {
$input_value_criticity = $config['cr_default_criticity'];
$input_value_owner = $config['cr_default_owner'];
$input_value_content = $config['cr_incident_content'];
$input_value_resolution = 0;
} else {
$input_value_title = '';
$input_value_type = '';
@ -190,6 +207,7 @@ if ($update) {
$input_value_criticity = '';
$input_value_owner = '';
$input_value_content = '';
$input_value_resolution = 0;
}
$table->data[0][0] = '<div class="label_select"><p class="input_label">'.__('Title').':&nbsp'.$help_macros.'</p>';
@ -303,8 +321,26 @@ $table->data[2][2] .= '<div class="label_select_parent">'.html_print_autocomplet
'w100p'
).'</div>';
$table->data[3][0] = '<div class="label_select"><p class="input_label">'.__('Description').':&nbsp'.$help_macros.'</p>';
$table->data[3][0] .= '<div class="label_select_parent">'.html_print_textarea(
$table->data[3][0] = '<div class="label_select"><p class="input_label">'.__('Resolution').': </p>';
$table->data[3][0] .= '<div class="label_select_parent">'.html_print_select(
$integria_resolution_values,
'resolution',
$input_value_resolution,
'',
'',
1,
true,
false,
true,
'',
false,
'width: 100%;'
).'</div>';
$table->data[4][0] = '<div class="label_select"><p class="input_label">'.__('Description').':&nbsp'.$help_macros.'</p>';
$table->data[4][0] .= '<div class="label_select_parent">'.html_print_textarea(
'incident_content',
3,
20,
@ -313,10 +349,10 @@ $table->data[3][0] .= '<div class="label_select_parent">'.html_print_textarea(
true
).'</div>';
$table->data[4][0] = '<div class="label_select"><p class="input_label">'.__('File name').':</p>';
$table->data[4][0] .= html_print_input_file('userfile', true);
$table->data[5][0] = '<div class="label_select"><p class="input_label">'.__('Attachment description').':</p>';
$table->data[5][0] .= html_print_textarea(
$table->data[5][0] = '<div class="label_select"><p class="input_label">'.__('File name').':</p>';
$table->data[5][0] .= html_print_input_file('userfile', true);
$table->data[6][0] = '<div class="label_select"><p class="input_label">'.__('Attachment description').':</p>';
$table->data[6][0] .= html_print_textarea(
'file_description',
3,
20,
@ -345,3 +381,32 @@ if ($update) {
}
echo '</div>';
?>
<script type="text/javascript">
$(document).ready(function () {
$('#add_alert_table-3').hide();
var input_value_status =
<?php
$status_value = ($input_value_status === '') ? 0 : $input_value_status;
echo $status_value;
?>
;
if (input_value_status === 7) {
$('#add_alert_table-3').show();
} else {
$('#add_alert_table-3').hide();
}
$('#status').on('change', function() {
if ($(this).val() === '7') {
$('#add_alert_table-3').show();
} else {
$('#add_alert_table-3').hide();
}
});
});
</script>

View File

@ -220,7 +220,7 @@ if (check_acl($config['id_user'], 0, 'VR') || check_acl($config['id_user'], 0, '
$name = io_safe_output($layout['name']);
$sub2['operation/visual_console/render_view&amp;id='.$layout['id']]['text'] = mb_substr($name, 0, 19);
$sub2['operation/visual_console/render_view&amp;id='.$layout['id']]['text'] = ui_print_truncate_text($name, MENU_SIZE_TEXT, false, true, false);
$sub2['operation/visual_console/render_view&amp;id='.$layout['id']]['id'] = mb_substr($name, 0, 19);
$sub2['operation/visual_console/render_view&amp;id='.$layout['id']]['title'] = $name;
if (!empty($config['vc_refr'])) {
@ -235,7 +235,7 @@ if (check_acl($config['id_user'], 0, 'VR') || check_acl($config['id_user'], 0, '
if ($break_max_console) {
$sub2['godmode/reporting/visual_console_favorite']['text'] = __('Show more').' >';
$sub2['godmode/reporting/visual_console_favorite']['id'] = 'visual_favourite_console';
$sub2['godmode/reporting/visual_console_favorite']['title'] = 'show_more';
$sub2['godmode/reporting/visual_console_favorite']['title'] = __('Show more');
$sub2['godmode/reporting/visual_console_favorite']['refr'] = 0;
}
@ -281,7 +281,7 @@ if (check_acl($config['id_user'], 0, 'MR') || check_acl($config['id_user'], 0, '
continue;
}
$sub2['operation/gis_maps/render_view&amp;map_id='.$gisMap['id_tgis_map']]['text'] = mb_substr(io_safe_output($gisMap['map_name']), 0, 15);
$sub2['operation/gis_maps/render_view&amp;map_id='.$gisMap['id_tgis_map']]['text'] = ui_print_truncate_text(io_safe_output($gisMap['map_name']), MENU_SIZE_TEXT, false, true, false);
$sub2['operation/gis_maps/render_view&amp;map_id='.$gisMap['id_tgis_map']]['id'] = mb_substr(io_safe_output($gisMap['map_name']), 0, 15);
$sub2['operation/gis_maps/render_view&amp;map_id='.$gisMap['id_tgis_map']]['title'] = io_safe_output($gisMap['map_name']);
$sub2['operation/gis_maps/render_view&amp;map_id='.$gisMap['id_tgis_map']]['refr'] = 0;
@ -345,7 +345,7 @@ if (check_acl($config['id_user'], 0, 'RR') || check_acl($config['id_user'], 0, '
$name = io_safe_output($dashboard['name']);
$sub2['operation/dashboard/dashboard&dashboardId='.$dashboard['id']] = [
'text' => mb_substr($name, 0, 19),
'text' => ui_print_truncate_text($name, MENU_SIZE_TEXT, false, true, false),
'title' => $name,
];
}

View File

@ -208,14 +208,7 @@ if ($searchpolicies === true) {
$sql = "SELECT id, name, description, id_group, status
FROM tpolicies
WHERE name LIKE '$stringSearchSQL'
AND
(id_group IN ($id_user_groups_str)
OR 1 = (
SELECT is_admin
FROM tusuario
WHERE id_user = 'admin'
)
)
AND id_group IN ($id_user_groups_str)
";
}

View File

@ -225,7 +225,7 @@ if ($searchUsers) {
$user_groups = users_get_groups(
$user['id_user'],
'AR',
false,
$user_can_manage_all
);
@ -236,7 +236,6 @@ if ($searchUsers) {
&& $config['id_user'] != $user['id_user']
|| (users_is_admin($config['id_user']) === false
&& users_is_admin($user['id_user']) === true)
|| $config['id_user'] === $user['id_user']
) {
unset($users[$key]);
} else {

View File

@ -2,8 +2,8 @@
# Pandora FMS Console
#
%define name pandorafms_console
%define version 7.0NG.758
%define release 211115
%define version 7.0NG.758.1
%define release 211124
# User and Group under which Apache is running
%define httpd_name httpd

View File

@ -2,8 +2,8 @@
# Pandora FMS Console
#
%define name pandorafms_console
%define version 7.0NG.758
%define release 211115
%define version 7.0NG.758.1
%define release 211124
# User and Group under which Apache is running
%define httpd_name httpd

View File

@ -2,8 +2,8 @@
# Pandora FMS Console
#
%define name pandorafms_console
%define version 7.0NG.758
%define release 211115
%define version 7.0NG.758.1
%define release 211124
%define httpd_name httpd
# User and Group under which Apache is running
%define httpd_name apache2

View File

@ -9,7 +9,7 @@
# This code is licensed under GPL 2.0 license.
# **********************************************************************
PI_VERSION="7.0NG.758"
PI_VERSION="7.0NG.758.1"
FORCE=0
DESTDIR=""
LOG_TIMESTAMP=`date +"%Y/%m/%d %H:%M:%S"`

View File

@ -266,7 +266,7 @@ CREATE TABLE IF NOT EXISTS `tagente_modulo` (
`prediction_threshold` int(4) default 0,
`parent_module_id` int(10) unsigned NOT NULL default 0,
`cps` int NOT NULL default 0,
`debug_content` varchar(200),
`debug_content` TEXT,
PRIMARY KEY (`id_agente_modulo`),
KEY `main_idx` (`id_agente_modulo`,`id_agente`),
KEY `tam_agente` (`id_agente`),
@ -570,16 +570,31 @@ CREATE TABLE IF NOT EXISTS `talert_template_module_actions` (
ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- -----------------------------------------------------
-- Table `talert_calendar`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `talert_calendar` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL default '',
`id_group` INT(10) NOT NULL DEFAULT 0,
`description` text,
PRIMARY KEY (`id`),
UNIQUE (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- -----------------------------------------------------
-- Table `talert_special_days`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `talert_special_days` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`id_calendar` int(10) unsigned NOT NULL DEFAULT 1,
`id_group` INT(10) NOT NULL DEFAULT 0,
`date` date NOT NULL DEFAULT '1970-01-01',
`same_day` enum('monday','tuesday','wednesday','thursday','friday','saturday','sunday') NOT NULL DEFAULT 'sunday',
`day_code` tinyint(2) NOT NULL,
`description` text,
PRIMARY KEY (`id`)
PRIMARY KEY (`id`),
FOREIGN KEY (`id_calendar`) REFERENCES talert_calendar(`id`)
ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- -----------------------------------------------------
@ -3850,6 +3865,7 @@ CREATE TABLE `tagent_repository` (
`arch` ENUM('x64', 'x86') DEFAULT 'x64',
`version` VARCHAR(10) DEFAULT '',
`path` text,
`deployment_timeout` INT UNSIGNED DEFAULT 600,
`uploaded_by` VARCHAR(100) DEFAULT '',
`uploaded` bigint(20) NOT NULL DEFAULT 0 COMMENT "When it was uploaded",
`last_err` text,

View File

@ -2777,3 +2777,5 @@ INSERT INTO `tncm_script` VALUES
(5,5,'enable&#x0d;&#x0a;expect:Password:&#92;s*&#x0d;&#x0a;_enablepass_&#x0d;&#x0a;term&#x20;length&#x20;0&#x0d;&#x0a;config&#x20;term&#x0d;&#x0a;end&#x0d;&#x0a;end&#x0d;&#x0a;exit&#x0d;&#x0a;');
INSERT INTO `tncm_template_scripts`(`id_template`, `id_script`) VALUES (1,1),(1,2),(1,3),(1,4),(1,5);
INSERT INTO `talert_calendar` VALUES (1, 'Default', 0, 'Default calendar');

View File

@ -0,0 +1,140 @@
<?php
/**
* Calendar: edit page
*
* @category View
* @package Pandora FMS
* @subpackage Alert
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2021 Artica Soluciones Tecnologicas
* Please see http://pandorafms.org for full contribution list
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation for version 2.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* ============================================================================
*/
// Extras required.
\ui_require_css_file('wizard');
\enterprise_include_once('meta/include/functions_alerts_meta.php');
\enterprise_hook('open_meta_frame');
if (\is_metaconsole() === true) {
\alerts_meta_print_header($tabs);
} else {
// Header.
\ui_print_page_header(
// Title.
__('Calendars Edit'),
// Icon.
'images/gm_alerts.png',
// Return.
false,
// Help.
'alert_special_days',
// Godmode.
true,
// Options.
$tabs
);
}
$is_management_allowed = \is_management_allowed();
if ($is_management_allowed === false) {
if (\is_metaconsole() === false) {
$url_link = '<a target="_blank" href="'.ui_get_meta_url($url).'">';
$url_link .= __('metaconsole');
$url_link .= '</a>';
} else {
$url_link = __('any node');
}
\ui_print_warning_message(
__(
'This node is configured with centralized mode. All alert calendar information is read only. Go to %s to manage it.',
$url_link
)
);
}
if (empty($message) === false) {
echo $message;
}
$inputs = [];
// Name.
$inputs[] = [
'label' => __('Name'),
'arguments' => [
'type' => 'text',
'name' => 'name',
'required' => true,
'value' => $calendar->name(),
],
];
// Group.
$inputs[] = [
'label' => __('Group'),
'arguments' => [
'type' => 'select_groups',
'returnAllGroup' => true,
'name' => 'id_group',
'selected' => $calendar->id_group(),
'required' => true,
],
];
// Description.
$inputs[] = [
'label' => __('Description'),
'arguments' => [
'type' => 'textarea',
'name' => 'description',
'required' => false,
'value' => $calendar->description(),
'rows' => 50,
'columns' => 30,
],
];
if ($is_management_allowed === true) {
// Submit.
$inputs[] = [
'arguments' => [
'name' => 'button',
'label' => (($create === true) ? __('Create') : __('Update')),
'type' => 'submit',
'attributes' => 'class="sub next"',
],
];
}
// Print form.
HTML::printForm(
[
'form' => [
'action' => $url.'&op=edit&action=save&id='.$calendar->id(),
'method' => 'POST',
],
'inputs' => $inputs,
],
false,
true
);
\enterprise_hook('close_meta_frame');

View File

@ -0,0 +1,154 @@
<?php
/**
* Calendar: Calendar list page.
*
* @category View
* @package Pandora FMS
* @subpackage Alert
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2021 Artica Soluciones Tecnologicas
* Please see http://pandorafms.org for full contribution list
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation for version 2.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* ============================================================================
*/
\ui_require_css_file('wizard');
\enterprise_include_once('meta/include/functions_alerts_meta.php');
\enterprise_hook('open_meta_frame');
if (\is_metaconsole() === true) {
\alerts_meta_print_header($tabs);
} else {
// Header.
\ui_print_page_header(
// Title.
__('Calendars'),
// Icon.
'images/gm_alerts.png',
// Return.
false,
// Help.
'alert_special_days',
// Godmode.
true,
// Options.
$tabs
);
}
$is_management_allowed = \is_management_allowed();
if ($is_management_allowed === false) {
if (\is_metaconsole() === false) {
$url_link = '<a target="_blank" href="'.ui_get_meta_url($url).'">';
$url_link .= __('metaconsole');
$url_link .= '</a>';
} else {
$url_link = __('any node');
}
\ui_print_warning_message(
__(
'This node is configured with centralized mode. All alert calendar information is read only. Go to %s to manage it.',
$url_link
)
);
}
if (empty($message) === false) {
echo $message;
}
// Datatables list.
try {
$columns = [
[
'text' => 'id',
'class' => 'invisible',
],
'name',
'id_group',
'description',
[
'text' => 'options',
'class' => 'w150px action_buttons',
],
];
$column_names = [
__('ID'),
__('Name'),
__('Group'),
__('Description'),
__('Options'),
];
$tableId = 'calendar_list';
// Load datatables user interface.
ui_print_datatable(
[
'id' => $tableId,
'class' => 'info_table',
'style' => 'width: 100%',
'columns' => $columns,
'column_names' => $column_names,
'ajax_url' => $ajax_url,
'ajax_data' => ['method' => 'drawListCalendar'],
'no_sortable_columns' => [-1],
'order' => [
'field' => 'id',
'direction' => 'asc',
],
'search_button_class' => 'sub filter float-right',
'form' => [
'inputs' => [
[
'label' => __('Free search'),
'type' => 'text',
'class' => 'mw250px',
'id' => 'free_search',
'name' => 'free_search',
],
],
],
]
);
} catch (Exception $e) {
echo $e->getMessage();
}
if ((bool) check_acl($config['id_user'], 0, 'LM') === true) {
HTML::printForm(
[
'form' => [
'action' => $url.'&op=edit',
'method' => 'POST',
],
'inputs' => [
[
'arguments' => [
'name' => 'button',
'label' => __('Create'),
'type' => 'submit',
'attributes' => 'class="sub next"',
],
],
],
]
);
}
\enterprise_hook('close_meta_frame');

View File

@ -0,0 +1,515 @@
<?php
/**
* Calendar: Calendar list page.
*
* @category View
* @package Pandora FMS
* @subpackage Alert
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2021 Artica Soluciones Tecnologicas
* Please see http://pandorafms.org for full contribution list
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation for version 2.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* ============================================================================
*/
global $config;
\ui_require_css_file('wizard');
\enterprise_include_once('meta/include/functions_alerts_meta.php');
\enterprise_hook('open_meta_frame');
if (\is_metaconsole() === true) {
\alerts_meta_print_header($tabs);
} else {
// Header.
\ui_print_page_header(
// Title.
__('Special days'),
// Icon.
'images/gm_alerts.png',
// Return.
false,
// Help.
'alert_special_days',
// Godmode.
true,
// Options.
$tabs
);
}
$is_management_allowed = \is_management_allowed();
if ($is_management_allowed === false) {
if (\is_metaconsole() === false) {
$url_link = '<a target="_blank" href="'.ui_get_meta_url($url).'">';
$url_link .= __('metaconsole');
$url_link .= '</a>';
} else {
$url_link = __('any node');
}
\ui_print_warning_message(
__(
'This node is configured with centralized mode. All alert calendar information is read only. Go to %s to manage it.',
$url_link
)
);
}
if (empty($message) === false) {
echo $message;
}
$inputs = [];
// Name.
$inputs[] = [
'label' => __('iCalendar(.ics) file'),
'arguments' => [
'name' => 'ical_file',
'type' => 'file',
'columns' => 25,
'rows' => 10,
'options' => ['required' => 1],
],
];
$days = [];
$days['monday'] = __('Monday');
$days['tuesday'] = __('Tuesday');
$days['wednesday'] = __('Wednesday');
$days['thursday'] = __('Thursday');
$days['friday'] = __('Friday');
$days['saturday'] = __('Saturday');
$days['sunday'] = __('Sunday');
// Same day of the week.
$inputs[] = [
'label' => __('Same day of the week'),
'arguments' => [
'name' => 'day_code',
'type' => 'select',
'fields' => $days,
],
];
// Group.
$inputs[] = [
'label' => __('Group'),
'arguments' => [
'type' => 'select_groups',
'returnAllGroup' => true,
'name' => 'id_group',
],
];
// Group.
$inputs[] = [
'label' => __('Overwrite').ui_print_help_tip(
__('Check this box, if you want to overwrite existing same days.'),
true
),
'arguments' => [
'type' => 'checkbox',
'name' => 'overwrite',
'id' => 'overwrite',
'disabled_hidden' => true,
],
];
// Submit.
$inputs[] = [
'arguments' => [
'name' => 'button',
'label' => __('Upload'),
'type' => 'submit',
'attributes' => 'class="sub next"',
],
];
if ($is_management_allowed === true) {
// Print form.
HTML::printForm(
[
'form' => [
'action' => $url.'&op=upload_ical&id='.$id_calendar,
'method' => 'POST',
'id' => 'icalendar-special-days',
'enctype' => 'multipart/form-data',
],
'inputs' => $inputs,
],
false
);
}
$this_year = date('Y');
$this_month = date('m');
$filter = [];
if (!is_user_admin($config['id_user'])) {
$filter['id_group'] = array_keys(users_get_groups(false, 'LM'));
}
$url = $url.'&id_calendar='.$id_calendar;
// Show display range.
$html = "<table cellpadding='4' cellspacing='4' width='100%' margin-bottom: 10px;'><tr><td>".__('Display range: ');
if ($display_range) {
$html .= '<a href="'.$url.'">['.__('Default').']</a>&nbsp;&nbsp;';
if ($display_range > 1970) {
$html .= '<a href="'.$url.'&display_range=';
$html .= ($display_range - 1);
$html .= '">&lt;&lt;&nbsp;</a>';
}
$html .= '<a href="'.$url.'&display_range='.$display_range.'" class="bolder">['.$display_range.']</a>';
$html .= '<a href="'.$url.'&display_range=';
$html .= ($display_range + 1);
$html .= '">&nbsp;&gt;&gt;</a>';
} else {
$html .= '<a href="'.$url.'" class="bolder">['.__('Default').']</a>&nbsp;&nbsp;';
$html .= '<a href="'.$url.'&display_range=';
$html .= ($this_year - 1);
$html .= '">&lt;&lt;&nbsp;</a>';
$html .= '<a href="'.$url.'&display_range=';
$html .= $this_year;
$html .= '">[';
$html .= $this_year;
$html .= ']</a>';
$html .= '<a href="'.$url.'&display_range=';
$html .= ($this_year + 1);
$html .= '">&nbsp;&gt;&gt;</a>';
}
$html .= '</td></tr>';
echo $html;
// Show calendar.
for ($month = 1; $month <= 12; $month++) {
if ($display_range) {
$display_month = $month;
$display_year = $display_range;
} else {
$display_month = ($this_month + $month - 1);
$display_year = $this_year;
}
if ($display_month > 12) {
$display_month -= 12;
$display_year++;
}
$cal_table = new stdClass();
$cal_table->width = '100%';
$cal_table->class = 'databox data';
$cal_table->data = [];
$cal_table->head = [];
$cal_table->head[0] = __('Sun');
$cal_table->head[1] = __('Mon');
$cal_table->head[2] = __('Tue');
$cal_table->head[3] = __('Wed');
$cal_table->head[4] = __('Thu');
$cal_table->head[5] = __('Fri');
$cal_table->head[6] = __('Sat');
$cal_table->cellstyle = [];
$cal_table->size = [];
$cal_table->size[0] = '14%';
$cal_table->size[1] = '14%';
$cal_table->size[2] = '14%';
$cal_table->size[3] = '14%';
$cal_table->size[4] = '14%';
$cal_table->size[5] = '14%';
$cal_table->size[6] = '14%';
$cal_table->align = [];
$cal_table->border = '1';
$cal_table->titlestyle = 'text-align:center; font-weight: bold;';
switch ($display_month) {
case 1:
$cal_table->title = __('January');
break;
case 2:
$cal_table->title = __('February');
break;
case 3:
$cal_table->title = __('March');
break;
case 4:
$cal_table->title = __('April');
break;
case 5:
$cal_table->title = __('May');
break;
case 6:
$cal_table->title = __('June');
break;
case 7:
$cal_table->title = __('July');
break;
case 8:
$cal_table->title = __('August');
break;
case 9:
$cal_table->title = __('September');
break;
case 10:
$cal_table->title = __('October');
break;
case 11:
$cal_table->title = __('November');
break;
case 12:
$cal_table->title = __('December');
break;
default:
// Not possible.
break;
}
$cal_table->title .= ' / '.$display_year;
$last_day = date('j', mktime(0, 0, 0, ($display_month + 1), 0, $display_year));
$cal_line = 0;
for ($day = 1; $day < ($last_day + 1); $day++) {
$week = date('w', mktime(0, 0, 0, $display_month, $day, $display_year));
if ($cal_line == 0 && $week != 0 && $day == 1) {
for ($i = 0; $i < $week; $i++) {
$cal_table->cellstyle[$cal_line][$i] = 'font-size: 18px;';
$cal_table->data[$cal_line][$i] = '-';
}
}
if ($week == 0 || $week == 6) {
$cal_table->cellstyle[$cal_line][$week] = 'color: red;';
}
$date = sprintf('%04d-%02d-%02d', $display_year, $display_month, $day);
$date_wildcard = sprintf('0001-%02d-%02d', $display_month, $day);
$cal_table->cellstyle[$cal_line][$week] .= 'font-size: 18px;';
$cal_table->data[$cal_line][$week] = $day.'&nbsp;';
if ($is_management_allowed === true) {
$cal_table->data[$cal_line][$week] .= '<a href="'.$url.'&op=edit&date='.$date.'" title=';
$cal_table->data[$cal_line][$week] .= __('Create');
$cal_table->data[$cal_line][$week] .= '>'.html_print_image(
'images/add_mc.png',
true,
['class' => 'invert_filter']
).'</a>';
}
if (empty($specialDays) === false && isset($specialDays[$display_year][$display_month][$day]) === true) {
$cal_table->data[$cal_line][$week] .= '<br>';
foreach ($specialDays[$display_year][$display_month][$day] as $special_day) {
// Only show description if is filled.
$cal_table->data[$cal_line][$week] .= '<div class="note-special-day">';
$cal_table->data[$cal_line][$week] .= '<div>';
$cal_table->data[$cal_line][$week] .= ui_print_group_icon(
$special_day['id_group'],
true
);
if (empty($special_day['description']) === false) {
$cal_table->data[$cal_line][$week] .= ui_print_help_tip($special_day['description'], true);
}
if ($special_day['date'] == $date_wildcard) {
$cal_table->data[$cal_line][$week] .= '(';
$cal_table->data[$cal_line][$week] .= ui_print_help_tip(
'This is valid every year. However, this will be ignored if indivisual setting for the same group is available.',
true
);
$cal_table->data[$cal_line][$week] .= ') ';
}
$cal_table->data[$cal_line][$week] .= __('As ');
switch ($special_day['day_code']) {
case '1':
$cal_table->data[$cal_line][$week] .= __('Monday');
break;
case '2':
$cal_table->data[$cal_line][$week] .= __('Tuesday');
break;
case '3':
$cal_table->data[$cal_line][$week] .= __('Wednesday');
break;
case '4':
$cal_table->data[$cal_line][$week] .= __('Thursday');
break;
case '5':
$cal_table->data[$cal_line][$week] .= __('Friday');
break;
case '6':
$cal_table->data[$cal_line][$week] .= __('Saturday');
break;
case '7':
$cal_table->data[$cal_line][$week] .= __('Sunday');
break;
case '8':
$cal_table->data[$cal_line][$week] .= __('Holidays');
break;
default:
// Not possible.
break;
}
$cal_table->data[$cal_line][$week] .= '</div>';
$cal_table->data[$cal_line][$week] .= '<div>';
if ($special_day['id_group'] || (users_can_manage_group_all('LM') === true && $special_day['id_group'] == 0)) {
$script_delete = '';
$dateformat = date_create($special_day['date']);
$options_zoom = htmlspecialchars(
json_encode(
[
'date' => $special_day['date'],
'id_group' => $special_day['id_group'],
'day_code' => $special_day['day_code'],
'id_calendar' => $special_day['id_calendar'],
'btn_ok_text' => __('Create'),
'btn_cancel_text' => __('Cancel'),
'title' => date_format($dateformat, 'd M Y'),
'url' => ui_get_full_url('ajax.php', false, false, false),
'page' => $ajax_url,
'loading' => __('Loading, this operation might take several minutes...'),
]
),
ENT_QUOTES,
'UTF-8'
);
$onclick_zoom = 'load_templates_alerts_special_days('.$options_zoom.')';
$cal_table->data[$cal_line][$week] .= '<a href="#" onclick="'.$onclick_zoom.'"';
$cal_table->data[$cal_line][$week] .= 'title="';
$cal_table->data[$cal_line][$week] .= __('Show templates');
$cal_table->data[$cal_line][$week] .= '">';
$cal_table->data[$cal_line][$week] .= html_print_image(
'images/zoom.png',
true,
['class' => 'invert_filter']
).'</a>';
if ($is_management_allowed === true) {
$cal_table->data[$cal_line][$week] .= '<a href="'.$url.'&op=edit&id='.$special_day['id'].'" title=';
$cal_table->data[$cal_line][$week] .= __('Edit');
$cal_table->data[$cal_line][$week] .= '>'.html_print_image(
'images/config.png',
true,
['class' => 'invert_filter']
).'</a> &nbsp;';
$url_delete = $url.'&op=delete&id='.$special_day['id'];
$script_delete = 'if (!confirm(\''.__('Are you sure?').'\')) return false;';
$cal_table->data[$cal_line][$week] .= '<a href="'.$url_delete.'"';
$cal_table->data[$cal_line][$week] .= ' onClick="'.$script_delete.'"';
$cal_table->data[$cal_line][$week] .= 'title="';
$cal_table->data[$cal_line][$week] .= __('Remove');
$cal_table->data[$cal_line][$week] .= '">';
$cal_table->data[$cal_line][$week] .= html_print_image(
'images/cross.png',
true,
['class' => 'invert_filter']
).'</a>';
}
}
$cal_table->data[$cal_line][$week] .= '</div>';
$cal_table->data[$cal_line][$week] .= '</div>';
}
}
if ($week == 6) {
$cal_line++;
}
}
for ($padding = ($week + 1); $padding <= 6; $padding++) {
$cal_table->cellstyle[$cal_line][$padding] = 'font-size: 18px;';
$cal_table->data[$cal_line][$padding] = '-';
}
html_print_table($cal_table);
}
if ((bool) check_acl($config['id_user'], 0, 'LM') === true) {
HTML::printForm(
[
'form' => [
'action' => $url.'&op=edit',
'method' => 'POST',
],
'inputs' => [
[
'arguments' => [
'name' => 'button',
'label' => __('Create'),
'type' => 'submit',
'attributes' => 'class="sub next"',
],
],
],
]
);
}
echo '<div id="modal-alert-templates" class="invisible"></div>';
ui_require_javascript_file('pandora_alerts');
\enterprise_hook('close_meta_frame');
?>
<script type="text/javascript">
$(document).ready (function () {
$("#submit-button").click (function (e) {
e.preventDefault();
load_templates_alerts_special_days({
date: '',
id_group: $("#id_group").val(),
day_code: $("#day_code").val(),
id_calendar: '<?php echo $id_calendar; ?>',
btn_ok_text: '<?php echo __('Create'); ?>',
btn_cancel_text: '<?php echo __('Cancel'); ?>',
title: '<?php echo __('Load calendar'); ?>',
url: '<?php echo ui_get_full_url('ajax.php', false, false, false); ?>',
page: "godmode/alerts/alert_special_days",
loading: '<?php echo __('Loading, this operation might take several minutes...'); ?>',
name_form: 'icalendar-special-days'
});
});
});
</script>

View File

@ -0,0 +1,216 @@
<?php
/**
* Special days.
*
* @category Alerts
* @package Pandora FMS
* @subpackage Community
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2021 Artica Soluciones Tecnologicas
* Please see http://pandorafms.org for full contribution list
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation for version 2.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* ============================================================================
*/
// Extras required.
\ui_require_css_file('wizard');
\enterprise_include_once('meta/include/functions_alerts_meta.php');
\enterprise_hook('open_meta_frame');
if (\is_metaconsole() === true) {
\alerts_meta_print_header($tabs);
} else {
// Header.
\ui_print_page_header(
// Title.
__('Alerts').' &raquo; '.__('Configure special day'),
// Icon.
'images/gm_alerts.png',
// Return.
false,
// Help.
'alert_special_days',
// Godmode.
true,
// Options.
$tabs
);
}
$is_management_allowed = \is_management_allowed();
if ($is_management_allowed === false) {
if (\is_metaconsole() === false) {
$url_link = '<a target="_blank" href="'.ui_get_meta_url($url).'">';
$url_link .= __('metaconsole');
$url_link .= '</a>';
} else {
$url_link = __('any node');
}
\ui_print_warning_message(
__(
'This node is configured with centralized mode. All alert calendar information is read only. Go to %s to manage it.',
$url_link
)
);
}
if (empty($message) === false) {
echo $message;
}
$inputs = [];
// Date.
$inputs[] = [
'label' => __('Date'),
'arguments' => [
'type' => 'text',
'name' => 'date',
'required' => true,
'value' => $specialDay->date(),
],
'extra' => html_print_image(
'images/calendar_view_day.png',
true,
[
'alt' => 'calendar',
'onclick' => "scwShow(scwID('text-date'),this);",
'class' => 'invert_filter',
]
),
];
if (users_can_manage_group_all('LM') === true) {
$display_all_group = true;
} else {
$display_all_group = false;
}
// Group.
$inputs[] = [
'label' => __('Group'),
'arguments' => [
'type' => 'select_groups',
'returnAllGroup' => $display_all_group,
'name' => 'id_group',
'selected' => $specialDay->id_group(),
],
];
$days = [];
$days[1] = __('Monday');
$days[2] = __('Tuesday');
$days[3] = __('Wednesday');
$days[4] = __('Thursday');
$days[5] = __('Friday');
$days[6] = __('Saturday');
$days[7] = __('Sunday');
$days[8] = __('Holidays');
// Same day of the week.
$inputs[] = [
'label' => __('Same day of the week'),
'arguments' => [
'name' => 'day_code',
'type' => 'select',
'fields' => $days,
'selected' => ($specialDay->day_code() === null) ? 1 : $specialDay->day_code(),
],
];
// Description.
$inputs[] = [
'label' => __('Description'),
'arguments' => [
'type' => 'textarea',
'name' => 'description',
'required' => false,
'value' => $specialDay->description(),
'rows' => 50,
'columns' => 30,
],
];
// Calendar.
$inputs[] = [
'arguments' => [
'type' => 'hidden',
'name' => 'id_calendar',
'value' => $specialDay->id_calendar(),
],
];
if ($is_management_allowed === true) {
// Submit.
$inputs[] = [
'arguments' => [
'name' => 'button',
'label' => (($create === true) ? __('Create') : __('Update')),
'type' => 'submit',
'attributes' => 'class="sub next"',
],
];
}
// Print form.
HTML::printForm(
[
'form' => [
'id' => 'form-special-days',
'action' => $url.'&action=save&id='.$specialDay->id(),
'method' => 'POST',
],
'inputs' => $inputs,
],
false,
true
);
echo '<div id="modal-alert-templates" class="invisible"></div>';
ui_require_javascript_file('calendar');
ui_require_javascript_file('pandora_alerts');
\enterprise_hook('close_meta_frame');
?>
<script type="text/javascript">
$(document).ready (function () {
$("#submit-button").click (function (e) {
e.preventDefault();
var date = new Date($("#text-date").val());
var dateformat = date.toLocaleString(
'default',
{day: 'numeric', month: 'short', year: 'numeric'}
);
load_templates_alerts_special_days({
date: $("#text-date").val(),
id_group: $("#id_group").val(),
day_code: $("#day_code").val(),
id_calendar: '<?php echo $id_calendar; ?>',
btn_ok_text: '<?php echo __('Create'); ?>',
btn_cancel_text: '<?php echo __('Cancel'); ?>',
title: dateformat,
url: '<?php echo ui_get_full_url('ajax.php', false, false, false); ?>',
page: '<?php echo $ajax_url; ?>',
loading: '<?php echo __('Loading, this operation might take several minutes...'); ?>',
name_form: 'form-special-days'
});
});
});
</script>

View File

@ -76,10 +76,11 @@ $inputs = [
[
'label' => __('Name'),
'arguments' => [
'type' => 'text',
'name' => 'name',
'value' => $arrayDashboard['name'],
'size' => '',
'type' => 'text',
'name' => 'name',
'value' => $arrayDashboard['name'],
'size' => '',
'maxlength' => 35,
],
],
[

View File

@ -29,8 +29,6 @@
// Button for display full screen mode.
global $config;
$queryFull = [
'dashboardId' => $dashboardId,
'refr' => $refr,
@ -141,10 +139,11 @@ $publiclink['text'] .= html_print_image(
);
$publiclink['text'] .= '</a>';
// Check if it is a public dashboard.
$public_dashboard_hash = get_parameter('hash', false);
// Refresh selector time dashboards.
if (isset($config['public_dashboard']) === true
&& (bool) $config['public_dashboard'] === true
) {
if ($public_dashboard_hash !== false) {
$urlRefresh = $publicUrl;
} else {
$queryRefresh = [

View File

@ -1,5 +1,5 @@
package: pandorafms-server
Version: 7.0NG.758-211115
Version: 7.0NG.758.1-211124
Architecture: all
Priority: optional
Section: admin

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