alert template schedule pandora_enterprise#3943

This commit is contained in:
Daniel Barbero Martin 2022-01-28 14:06:31 +01:00
parent 2e5f778703
commit 392a9223e8
2 changed files with 162 additions and 132 deletions

View File

@ -284,6 +284,7 @@ function update_template($step)
$result = alerts_update_alert_template($id, $values);
} else if ($step == 2) {
// TODO: Days.
$monday = (bool) get_parameter('monday');
$tuesday = (bool) get_parameter('tuesday');
$wednesday = (bool) get_parameter('wednesday');
@ -291,11 +292,14 @@ function update_template($step)
$friday = (bool) get_parameter('friday');
$saturday = (bool) get_parameter('saturday');
$sunday = (bool) get_parameter('sunday');
$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');
$time_to = date('H:i:00', strtotime($time_to));
$schedule = get_parameter('schedule');
$special_day = (int) get_parameter('special_day');
$threshold = (int) get_parameter('threshold');
$max_alerts = (int) get_parameter('max_alerts');
$min_alerts = (int) get_parameter('min_alerts');
@ -312,14 +316,24 @@ function update_template($step)
$default_action = null;
}
hd($schedule);
$values = [
'monday' => $monday,
'tuesday' => $tuesday,
'wednesday' => $wednesday,
'thursday' => $thursday,
'friday' => $friday,
'saturday' => $saturday,
'sunday' => $sunday,
// 'monday' => $monday,
// 'tuesday' => $tuesday,
// 'wednesday' => $wednesday,
// 'thursday' => $thursday,
// 'friday' => $friday,
// 'saturday' => $saturday,
// 'sunday' => $sunday,
// 'time_from' => $time_from,
// 'time_to' => $time_to,
'schedule' => json_encode(
json_decode(
io_safe_output($schedule),
true
)
),
'special_day' => $special_day,
'time_threshold' => $threshold,
'id_alert_action' => $default_action,
@ -334,20 +348,6 @@ function update_template($step)
'disable_event' => $disable_event,
];
// Different datetimes format for oracle
switch ($config['dbtype']) {
case 'mysql':
case 'postgresql':
$values['time_from'] = $time_from;
$values['time_to'] = $time_to;
break;
case 'oracle':
$values['time_from'] = "#to_date('".$time_from."','hh24:mi:ss')";
$values['time_to'] = "#to_date('".$time_to."','hh24:mi:ss')";
break;
}
$result = alerts_update_alert_template($id, $values);
} else if ($step == 3) {
$recovery_notify = (bool) get_parameter('recovery_notify');
@ -412,6 +412,7 @@ $type = '';
$value = '';
$max = '';
$min = '';
// TODO: Remove.
$time_from = '12:00:00';
$time_to = '12:00:00';
$monday = true;
@ -421,6 +422,8 @@ $thursday = true;
$friday = true;
$saturday = true;
$sunday = true;
$schedule = null;
$special_day = 0;
$default_action = 0;
$fields = [];
@ -555,6 +558,8 @@ if ($id && ! $create_template) {
$max = $template['max_value'];
$min = $template['min_value'];
$matches = $template['matches_value'];
// TODO: Remove.
$time_from = $template['time_from'];
$time_to = $template['time_to'];
$monday = (bool) $template['monday'];
@ -564,6 +569,8 @@ if ($id && ! $create_template) {
$friday = (bool) $template['friday'];
$saturday = (bool) $template['saturday'];
$sunday = (bool) $template['sunday'];
$schedule = $template['schedule'];
$special_day = (int) $template['special_day'];
$max_alerts = $template['max_alerts'];
$min_alerts = $template['min_alerts'];
@ -613,70 +620,7 @@ if ($step == 2) {
$show_matches = false;
}
// Firing conditions and events.
$table->colspan = [];
$table->data[0][0] = __('Days of week');
$table->data[0][1] = __('Mon');
$table->data[0][1] .= html_print_checkbox(
'monday',
1,
$monday,
true,
(!$is_management_allowed | $disabled)
);
$table->data[0][1] .= __('Tue');
$table->data[0][1] .= html_print_checkbox(
'tuesday',
1,
$tuesday,
true,
(!$is_management_allowed | $disabled)
);
$table->data[0][1] .= __('Wed');
$table->data[0][1] .= html_print_checkbox(
'wednesday',
1,
$wednesday,
true,
(!$is_management_allowed | $disabled)
);
$table->data[0][1] .= __('Thu');
$table->data[0][1] .= html_print_checkbox(
'thursday',
1,
$thursday,
true,
(!$is_management_allowed | $disabled)
);
$table->data[0][1] .= __('Fri');
$table->data[0][1] .= html_print_checkbox(
'friday',
1,
$friday,
true,
(!$is_management_allowed | $disabled)
);
$table->data[0][1] .= __('Sat');
$table->data[0][1] .= html_print_checkbox(
'saturday',
1,
$saturday,
true,
(!$is_management_allowed | $disabled)
);
$table->data[0][1] .= __('Sun');
$table->data[0][1] .= html_print_checkbox(
'sunday',
1,
$sunday,
true,
(!$is_management_allowed | $disabled)
);
$table->colspan[0][1] = 3;
$table->data[0][1] = '<div id="calendar"></div>';
$table->data[1][0] = __('Use special days list');
$table->data[0][0] = __('Use special days list');
$data_special_days = Calendar::calendars(
// Fields.
[ '`talert_calendar`.*' ],
@ -696,7 +640,7 @@ if ($step == 2) {
true
);
$table->data[1][1] = html_print_select(
$table->data[0][1] = html_print_select(
$data_special_days,
'special_day',
$special_day,
@ -710,46 +654,12 @@ if ($step == 2) {
(!$is_management_allowed | $disabled)
);
$table->data[2][0] = __('Time from');
$table->data[2][1] = html_print_input_text(
'time_from',
$time_from,
'',
7,
8,
true,
false,
false,
'',
'',
'',
'',
false,
'',
'',
'',
(!$is_management_allowed | $disabled)
);
$table->data[2][2] = __('Time to');
$table->data[2][3] = html_print_input_text(
'time_to',
$time_to,
'',
7,
8,
true,
false,
false,
'',
'',
'',
'',
false,
'',
'',
'',
(!$is_management_allowed | $disabled)
);
// Firing conditions and events.
$table->colspan = [];
$table->data[1][0] = __('Schedule');
$table->colspan[1][1] = 3;
$table->data[1][1] = '<div id="calendar_map"></div>';
$table->data[1][1] .= html_print_input_hidden('schedule', $schedule, true);
$table->colspan['threshold'][1] = 3;
$table->data['threshold'][0] = __('Time threshold');
@ -958,6 +868,8 @@ if ($step == 2) {
);
$table->colspan['example'][1] = 4;
} else if ($step == 3) {
hd($_POST);
$table->style[0] = 'font-weight: bold; vertical-align: middle';
$table->style[1] = 'font-weight: bold; vertical-align: top';
$table->style[2] = 'font-weight: bold; vertical-align: top';
@ -1548,7 +1460,11 @@ if ($step == 2) {
}
});
var calendarEl = document.getElementById('calendar');
//time_from, time_to, monday, tuesday, wednesday, thursday, friday, saturday, sunday
var eventsBBDD = $("#hidden-schedule").val();
var events = loadEventBBDD(eventsBBDD);
var calendarEl = document.getElementById('calendar_map');
var settings = {
timeFormat: '<?php echo TIME_FORMAT_JS; ?>',
timeOnlyTitle: '<?php echo __('Choose time'); ?>',
@ -1561,7 +1477,7 @@ if ($step == 2) {
url: '<?php echo ui_get_full_url('ajax.php', false, false, false); ?>'
}
var calendar = fullCalendarPandora(calendarEl, settings);
var calendar = fullCalendarPandora(calendarEl, settings, events);
calendar.render();
<?php
} else if ($step == 3) {

View File

@ -1,6 +1,6 @@
/* globals $, FullCalendar, uniqId, confirmDialog*/
// eslint-disable-next-line no-unused-vars
function fullCalendarPandora(calendarEl, settings) {
function fullCalendarPandora(calendarEl, settings, initialEvents) {
var calendar = new FullCalendar.Calendar(calendarEl, {
height: 625,
headerToolbar: {
@ -36,7 +36,7 @@ function fullCalendarPandora(calendarEl, settings) {
eventColor: "#82b92e",
editable: true,
dayMaxEvents: false,
events: [],
events: initialEvents,
select: function(info) {
var nextDay = info.start.getDay() === 6 ? 0 : info.start.getDay() + 1;
if (
@ -46,6 +46,7 @@ function fullCalendarPandora(calendarEl, settings) {
recalculate_events(calendar, {}, info.start, info.end, true);
}
calendar.unselect();
save_data_input(calendar);
},
selectAllow: function(info) {
var nextDay = info.start.getDay() === 6 ? 0 : info.start.getDay() + 1;
@ -85,10 +86,11 @@ function fullCalendarPandora(calendarEl, settings) {
info.event.end,
false
);
save_data_input(calendar);
}
},
eventDragStop: function(info) {
var trashEl = $("#calendar");
var trashEl = $("#calendar_map");
var ofs = trashEl.offset();
var x1 = ofs.left;
@ -104,6 +106,7 @@ function fullCalendarPandora(calendarEl, settings) {
) {
// Remove event.
info.event.remove();
save_data_input(calendar);
}
},
eventResize: function(info) {
@ -121,6 +124,7 @@ function fullCalendarPandora(calendarEl, settings) {
info.event.end,
false
);
save_data_input(calendar);
}
},
eventClick: function(info) {
@ -234,6 +238,7 @@ function fullCalendarPandora(calendarEl, settings) {
// Remove event.
info.event.remove();
}
save_data_input(calendar);
}
});
},
@ -309,3 +314,112 @@ function recalculate_events(calendar, newEvent, from, to, create) {
newEvent.setDates(from, to);
}
}
function save_data_input(calendar) {
var allEvents = calendar.getEvents();
var data = {};
var day_names = [
"sunday",
"monday",
"tuesday",
"wednesday",
"thursday",
"friday",
"saturday"
];
allEvents.forEach(function(event) {
var obj = {
start: time_format(event.start),
end: time_format(event.end)
};
if (data[day_names[event.start.getDay()]] == undefined) {
data[day_names[event.start.getDay()]] = [];
}
data[day_names[event.start.getDay()]].push(obj);
});
$("#hidden-schedule").val(JSON.stringify(data));
}
// eslint-disable-next-line no-unused-vars
function loadEventBBDD(events) {
console.log(events);
if (events === null || events === "") {
return {};
}
var current_day = new Date();
var day_names = [
"monday",
"tuesday",
"wednesday",
"thursday",
"friday",
"saturday",
"sunday",
"sun"
];
var keys_days_names = {
monday: 0,
tuesday: 1,
wednesday: 2,
thursday: 3,
friday: 4,
saturday: 5,
sunday: 6,
sun: 7
};
var dates = [];
day_names.forEach(function(element, i) {
dates[element] = getDays(current_day, i);
});
var result = [];
Object.entries(JSON.parse(events)).forEach(function(element) {
var day_string = element[0];
var events_day = element[1];
events_day.forEach(function(event) {
if (event != null) {
var time_from = event.start.split(":");
var time_to = event.end.split(":");
var end = dates[day_string].setHours(
time_to[0],
time_to[1],
time_to[2],
0
);
if (event.end === "00:00:00") {
end = dates[day_names[keys_days_names[day_string] + 1]].setHours(
time_to[0],
time_to[1],
time_to[2],
0
);
}
result.push({
title: "",
start: dates[day_string].setHours(
time_from[0],
time_from[1],
time_from[2],
0
),
end: end,
id: uniqId()
});
}
});
});
return result;
}
function getDays(d, i) {
d = new Date(d);
var day = d.getDay(),
diff = d.getDate() - day + i + (day == 0 ? -6 : 1);
return new Date(d.setDate(diff));
}