Merge branch 'ent-7503-Calendarios-para-dias-especiales' into 'develop'
special days template alerts See merge request artica/pandorafms!4508
This commit is contained in:
commit
a70661d94e
|
@ -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
|
|
@ -1,5 +1,30 @@
|
|||
START TRANSACTION;
|
||||
|
||||
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;
|
|
@ -4224,3 +4224,31 @@ INSERT INTO `tncm_script` VALUES
|
|||
(5,5,'enable
expect:Password:\s*
_enablepass_
term length 0
config term
end
end
exit
');
|
||||
|
||||
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;
|
||||
|
|
|
@ -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').' » '.__('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').' ';
|
||||
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').' ';
|
||||
$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 ' ';
|
||||
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> ';
|
||||
if ($display_range > 1970) {
|
||||
$html .= '<a href="index.php?sec=galertas&sec2=godmode/alerts/alert_special_days&display_range=';
|
||||
$html .= ($display_range - 1);
|
||||
$html .= '"><< </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 .= '"> >></a>';
|
||||
} else {
|
||||
$html .= '<a href="index.php?sec=galertas&sec2=godmode/alerts/alert_special_days" class="bolder">['.__('Default').']</a> ';
|
||||
$html .= '<a href="index.php?sec=galertas&sec2=godmode/alerts/alert_special_days&display_range=';
|
||||
$html .= ($this_year - 1);
|
||||
$html .= '"><< </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 .= '"> >></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> ';
|
||||
$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.' ';
|
||||
}
|
||||
|
||||
$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>';
|
||||
|
|
|
@ -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').' » '.__('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>';
|
|
@ -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)
|
||||
);
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -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
|
||||
*
|
||||
|
|
|
@ -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]);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -4032,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';
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
});
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
-- -----------------------------------------------------
|
||||
|
|
|
@ -2777,3 +2777,5 @@ INSERT INTO `tncm_script` VALUES
|
|||
(5,5,'enable
expect:Password:\s*
_enablepass_
term length 0
config term
end
end
exit
');
|
||||
|
||||
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');
|
||||
|
|
|
@ -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');
|
|
@ -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');
|
|
@ -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> ';
|
||||
if ($display_range > 1970) {
|
||||
$html .= '<a href="'.$url.'&display_range=';
|
||||
$html .= ($display_range - 1);
|
||||
$html .= '"><< </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 .= '"> >></a>';
|
||||
} else {
|
||||
$html .= '<a href="'.$url.'" class="bolder">['.__('Default').']</a> ';
|
||||
$html .= '<a href="'.$url.'&display_range=';
|
||||
$html .= ($this_year - 1);
|
||||
$html .= '"><< </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 .= '"> >></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.' ';
|
||||
|
||||
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> ';
|
||||
$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>
|
|
@ -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').' » '.__('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>
|
|
@ -531,15 +531,16 @@ sub pandora_evaluate_alert ($$$$$$$;$$$$) {
|
|||
my $date = sprintf("%4d%02d%02d", $year + 1900, $mon + 1, $mday);
|
||||
# '0001' means every year.
|
||||
my $date_every_year = sprintf("0001%02d%02d", $mon + 1, $mday);
|
||||
my $special_day = get_db_value ($dbh, 'SELECT same_day FROM talert_special_days WHERE (date = ? OR date = ?) AND (id_group = 0 OR id_group = ?) ORDER BY date DESC', $date, $date_every_year, $alert->{'id_group'});
|
||||
|
||||
my $special_day = get_db_value ($dbh, 'SELECT day_code FROM talert_special_days WHERE (date = ? OR date = ?) AND (id_group = 0 OR id_group = ?) AND (id_calendar = ?) ORDER BY date DESC', $date, $date_every_year, $alert->{'id_group'}, $alert->{'special_day'});
|
||||
|
||||
if (!defined($special_day)) {
|
||||
$special_day = '';
|
||||
$special_day = 0;
|
||||
}
|
||||
|
||||
if ($special_day ne '') {
|
||||
logger ($pa_config, $date . " is a special day for " . $alert->{'name'} . ". (as a " . $special_day . ")", 10);
|
||||
return $status if ($alert->{$special_day} != 1);
|
||||
|
||||
my @weeks = ( 'none', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday', 'holiday');
|
||||
if ($special_day != 0) {
|
||||
logger ($pa_config, $date . " is a special day for " . $alert->{'name'} . ". (as a " . $weeks[$special_day] . ")", 10);
|
||||
return $status if (!defined($alert->{$weeks[$special_day]}) || $alert->{$weeks[$special_day]} == 0);
|
||||
}
|
||||
else {
|
||||
logger ($pa_config, $date . " is *NOT* a special day for " . $alert->{'name'}, 10);
|
||||
|
|
|
@ -179,7 +179,7 @@ sub help_screen{
|
|||
help_screen_line('--update_alert_template', "<template_name> <field_to_change> \n\t <new_value>", 'Update a field of an alert template');
|
||||
help_screen_line('--validate_all_alerts', '', 'Validate all the alerts');
|
||||
help_screen_line('--validate_alert', '<template_name> <agent_id> <module_id> [<use_alias>]', 'Validate alert given angent, module and alert');
|
||||
help_screen_line('--create_special_day', "<special_day> <same_day> <description> <group>", 'Create special day');
|
||||
help_screen_line('--create_special_day', "<special_day> <calendar_name> <same_day> <description> <group>", 'Create special day');
|
||||
help_screen_line('--delete_special_day', '<special_day>', 'Delete special day');
|
||||
help_screen_line('--update_special_day', "<special_day> <field_to_change> <new_value>", 'Update a field of a special day');
|
||||
help_screen_line('--create_data_module_from_local_component', '<agent_name> <component_name> [<use_alias>]', "Create a new data \n\t module from a local component");
|
||||
|
@ -956,6 +956,31 @@ sub pandora_get_special_day_id ($$) {
|
|||
return defined ($special_day_id) ? $special_day_id : -1;
|
||||
}
|
||||
|
||||
|
||||
##########################################################################
|
||||
## SUB pandora_get_calendar_id(id)
|
||||
## Return calendar id, given "calendar_name"
|
||||
##########################################################################
|
||||
sub pandora_get_calendar_id ($$) {
|
||||
my ($dbh, $calendar_name) = @_;
|
||||
|
||||
my $calendar_id = get_db_value ($dbh, "SELECT id FROM talert_calendar WHERE ${RDBMS_QUOTE}name${RDBMS_QUOTE} = ?", $calendar_name);
|
||||
|
||||
return defined ($calendar_id) ? $calendar_id : -1;
|
||||
}
|
||||
|
||||
##########################################################################
|
||||
## SUB pandora_get_same_day_id(id)
|
||||
## Return same day id, given "same_day"
|
||||
##########################################################################
|
||||
sub pandora_get_same_day_id ($$) {
|
||||
my ($dbh, $same_day) = @_;
|
||||
|
||||
my $weeks = { 'monday' => 1, 'tuesday' => 2, 'wednesday' => 3, 'thursday' => 4, 'friday' => 5, 'saturday' => 6, 'sunday' => 7, 'holiday' => 8};
|
||||
|
||||
return defined ($weeks{$same_day}) ? $weeks{$same_day} : -1;
|
||||
}
|
||||
|
||||
##########################################################################
|
||||
## Delete a special day.
|
||||
##########################################################################
|
||||
|
@ -6413,12 +6438,16 @@ sub pandora_get_network_component_id($$) {
|
|||
##############################################################################
|
||||
|
||||
sub cli_create_special_day() {
|
||||
my ($special_day, $same_day, $description, $group_name) = @ARGV[2..5];
|
||||
my ($special_day, $calendar_name, $same_day, $description, $group_name) = @ARGV[2..5];
|
||||
my $calendar_name_exists = pandora_get_calendar_id ($dbh, $calendar_name);
|
||||
my $same_day_exists = pandora_get_same_day_id ($dbh, $same_day);
|
||||
my $special_day_exists = pandora_get_special_day_id ($dbh, $special_day);
|
||||
non_exist_check($special_day_exists,'special day',$special_day);
|
||||
non_exist_check($calendar_name_exists,'calendar name',$calendar_name);
|
||||
non_exist_check($same_day_exists,'same day',$same_day);
|
||||
|
||||
my $group_id = 0;
|
||||
|
||||
|
||||
# If group name is not defined, we assign group All (0)
|
||||
if(defined($group_name)) {
|
||||
$group_id = get_group_id($dbh, decode('UTF-8', $group_name));
|
||||
|
@ -6434,19 +6463,21 @@ sub cli_create_special_day() {
|
|||
help_screen ();
|
||||
exit 1;
|
||||
}
|
||||
if ($same_day !~ /monday|tuesday|wednesday|thursday|friday|saturday|sunday/) {
|
||||
|
||||
if ($same_day !~ /monday|tuesday|wednesday|thursday|friday|saturday|sunday|holiday/) {
|
||||
print_log "[ERROR] '$same_day' is invalid day.\n\n";
|
||||
$param = '--create_special_day';
|
||||
help_screen ();
|
||||
exit 1;
|
||||
}
|
||||
|
||||
|
||||
my %parameters;
|
||||
|
||||
|
||||
$parameters{"${RDBMS_QUOTE}date${RDBMS_QUOTE}"} = $special_day;
|
||||
$parameters{'same_day'} = $same_day;
|
||||
$parameters{'description'} = decode('UTF-8', $description);
|
||||
$parameters{'id_group'} = $group_id;
|
||||
$parameters{'calendar_name'} = $calendar_name;
|
||||
|
||||
pandora_create_special_day_from_hash ($conf, \%parameters, $dbh);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue