916 lines
38 KiB
PHP
916 lines
38 KiB
PHP
<?php
|
|
/*
|
|
schedmaint.php
|
|
OpenLog Online Logbook
|
|
Copyright (C) 2026 Rod Wright
|
|
|
|
SPDX-License-Identifier: GPL-2.0
|
|
*/
|
|
|
|
include("functions.php");
|
|
|
|
if (isset($_SESSION['login'])) {
|
|
$loggedin = true;
|
|
} else {
|
|
$loggedin = false;
|
|
}
|
|
$techid = $_SESSION['login'] ?? NULL;
|
|
$isadmin = dblookup($db, "techs", "techid", "admin", $techid);
|
|
|
|
$upcoming = $_REQUEST['upcoming'] ?? NULL;
|
|
$schedule = $_REQUEST['schedule'] ?? NULL;
|
|
$tasks = $_REQUEST['tasks'] ?? NULL;
|
|
$devices = $_REQUEST['devices'] ?? NULL;
|
|
$action = $_REQUEST['action'] ?? NULL;
|
|
$complete = $_REQUEST['complete'] ?? NULL;
|
|
$defer = $_REQUEST['defer'] ?? NULL;
|
|
$add = $_REQUEST['add'] ?? NULL;
|
|
$edit = $_REQUEST['edit'] ?? NULL;
|
|
$update = $_REQUEST['update'] ?? NULL;
|
|
$delete = $_REQUEST['delete'] ?? NULL;
|
|
$id = $_REQUEST['id'] ?? NULL;
|
|
$active_flag = $_REQUEST['active_flag'] ?? 0;
|
|
|
|
$devicename = $_REQUEST['devicename'] ?? NULL;
|
|
$devicedesc = $_REQUEST['devicedesc'] ?? NULL;
|
|
$group_flag = $_REQUEST['group_flag'] ?? 0;
|
|
$members = $_REQUEST['members'] ?? [];
|
|
|
|
$weekdays_only = $_REQUEST['weekdays_only'] ?? NULL;
|
|
$nextdue_relative = $_REQUEST['nextdue_relative'] ?? NULL;
|
|
$taskname = $_REQUEST['taskname'] ?? NULL;
|
|
$taskdesc = $_REQUEST['taskdesc'] ?? NULL;
|
|
$frequency = $_REQUEST['frequency'] ?? NULL;
|
|
$period = $_REQUEST['period'] ?? NULL;
|
|
$refdoc_name = $_REQUEST['refdoc_name'] ?? NULL;
|
|
$refdoc_url = $_REQUEST['refdoc_url'] ?? NULL;
|
|
|
|
$deferred_flag = $_REQUEST['deferred_flag'] ?? 0;
|
|
$deferred_date = $_REQUEST['deferred_date'] ?? NULL;
|
|
$start_date = $_REQUEST['start_date'] ?? NULL;
|
|
$last_date = $_REQUEST['last_date'] ?? NULL;
|
|
$task = $_REQUEST['task'] ?? NULL;
|
|
$device = $_REQUEST['device'] ?? NULL;
|
|
$deferuntil = $_REQUEST['deferuntil'] ?? NULL;
|
|
$completedate = $_REQUEST['completedate'] ?? NULL;
|
|
$addlognote = $_REQUEST['addlognote'] ?? NULL;
|
|
|
|
$logname = LOG_NAME;
|
|
|
|
$print = $_REQUEST['print'] ?? NULL;
|
|
|
|
if ($print) {
|
|
$sbcolor = P_SIDEBAR_COLOR;
|
|
$mbgcolor = P_MENUBG_COLOR;
|
|
} else {
|
|
$sbcolor = SIDEBAR_COLOR;
|
|
$mbgcolor = MENUBG_COLOR;
|
|
}
|
|
// **** BEGIN DATABASE OPERATIONS ****
|
|
$tomorrow = mysqli_fetch_row(mysqli_query($db, "select adddate((select current_date),1)"))[0];
|
|
$errorstack = array();
|
|
|
|
if ($action) {
|
|
if ($complete) {
|
|
// sanitize user input
|
|
$completedate = fix_date($completedate);
|
|
// update events
|
|
mysqli_query($db, "update events set last_date=\"$completedate\", deferred_flag=0, deferred_date=\"0001-01-01\" where eventid=\"$id\"");
|
|
if ($addlognote) {
|
|
$compltaskname = mysqli_fetch_row(mysqli_query($db, "select tasks.taskname from tasks,events where events.eventid=\"$id\" and tasks.taskid=events.task"))[0];
|
|
$compldevicename = mysqli_fetch_row(mysqli_query($db, "select devices.devicename from devices,events where events.eventid=\"$id\" and devices.deviceid=events.device"))[0];
|
|
$lognotestrg = "Scheduled Maintenance task \"$compltaskname\" completed on device \"$compldevicename\".";
|
|
// redirect to logentry
|
|
header("Cache-Control:no-cache, must-revalidate");
|
|
header("Pragma:no-cache");
|
|
header("Location:logentry.php?schedmaintcomplete=1¬e=$lognotestrg");
|
|
exit(0);
|
|
}
|
|
}
|
|
if ($defer) {
|
|
$deferuntil = fix_date($deferuntil);
|
|
// update events
|
|
mysqli_query($db, "update events set deferred_flag=1, deferred_date=\"$deferuntil\" where eventid=\"$id\"");
|
|
}
|
|
}
|
|
if ($add) {
|
|
if ($schedule) {
|
|
// do error checking
|
|
// check for task selected
|
|
if ($task) {
|
|
$taskselected = true;
|
|
} else {
|
|
$taskselected = false;
|
|
$errorstack[] = "<img src=\"icons/exclamation-red.png\" border=\"0\"> You didn't select a task.<br>";
|
|
}
|
|
// check for device selected
|
|
if ($device) {
|
|
$deviceselected = true;
|
|
} else {
|
|
$deviceselected = false;
|
|
$errorstack[] = "<img src=\"icons/exclamation-red.png\" border=\"0\"> You didn't select a device.<br>";
|
|
}
|
|
// sanitize text data
|
|
if ($start_date == NULL) $start_date = $today;
|
|
if ($last_date == NULL) $last_date = "0001-01-01";
|
|
if ($deferred_date == NULL) $deferred_date = "0001-01-01";
|
|
$start_date = fix_date($start_date);
|
|
$last_date = fix_date($last_date);
|
|
$deferred_date = fix_date($deferred_date);
|
|
if ($taskselected && $deviceselected) {
|
|
// determine if device represents a group and break out individual devices
|
|
if (dblookup($db, "devices", "deviceid", "group_flag", $device)) {
|
|
$memberqry = mysqli_query($db, "select memberdevice from devicegroups where groupdevice=\"$device\"");
|
|
$memberlist = array();
|
|
while ($memberrow = mysqli_fetch_row($memberqry)) {
|
|
$memberlist[] = $memberrow[0];
|
|
}
|
|
} else {
|
|
$memberlist = array($device);
|
|
}
|
|
// run through the memberlist and modify the table
|
|
foreach ($memberlist as $memberdev) {
|
|
$addqry = ("insert into events(task,device,start_date,last_date,deferred_flag,deferred_date,active_flag)
|
|
values(\"$task\",\"$memberdev\",\"$start_date\",\"$last_date\",\"$deferred_flag\",\"$deferred_date\",\"$active_flag\")");
|
|
mysqli_query($db, $addqry);
|
|
}
|
|
}
|
|
}
|
|
if ($tasks) {
|
|
// do error checking
|
|
// test for name supplied
|
|
if (strlen(trim($taskname))) {
|
|
$namesuppld = true;
|
|
} else {
|
|
$namesuppld = false;
|
|
$errorstack[] = "<img src=\"icons/exclamation-red.png\" border=\"0\"> Task name cannot be blank.<br>";
|
|
}
|
|
// test for name unique
|
|
if (mysqli_num_rows(mysqli_query($db, "select taskid from tasks where taskname=\"$taskname\""))) {
|
|
$nameunique = false;
|
|
$errorstack[] = "<img src=\"icons/exclamation-red.png\" border=\"0\"> Task name already exists.<br>";
|
|
} else {
|
|
$nameunique = true;
|
|
}
|
|
// sanitize text data
|
|
$taskname = mysqli_real_escape_string($db, $taskname);
|
|
$taskdesc = mysqli_real_escape_string($db, $taskdesc);
|
|
$refdoc_name = mysqli_real_escape_string($db, $refdoc_name);
|
|
$refdoc_url = mysqli_real_escape_string($db, $refdoc_url);
|
|
|
|
if ($namesuppld && $nameunique) {
|
|
// modify the table
|
|
$addqry = ("insert into tasks(taskname,taskdesc,frequency,period,weekdays_only,nextdue_relative,refdoc_name,refdoc_url,active_flag)
|
|
values(\"$taskname\",\"$taskdesc\",\"$frequency\",\"$period\",\"$weekdays_only\",\"$nextdue_relative\",\"$refdoc_name\",\"$refdoc_url\",\"$active_flag\")");
|
|
mysqli_query($db, $addqry);
|
|
}
|
|
}
|
|
if ($devices) {
|
|
// do error checking
|
|
// test for name supplied
|
|
if (strlen(trim($devicename))) {
|
|
$namesuppld = true;
|
|
} else {
|
|
$namesuppld = false;
|
|
$errorstack[] = "<img src=\"icons/exclamation-red.png\" border=\"0\"> Device name cannot be blank.<br>";
|
|
}
|
|
// test for name unique
|
|
if (mysqli_num_rows(mysqli_query($db, "select deviceid from devices where devicename=\"$devicename\""))) {
|
|
$nameunique = false;
|
|
$errorstack[] = "<img src=\"icons/exclamation-red.png\" border=\"0\"> Device name already exists.<br>";
|
|
} else {
|
|
$nameunique = true;
|
|
}
|
|
// sanitize name and description
|
|
$devicename = mysqli_real_escape_string($db, $devicename);
|
|
$devicedesc = mysqli_real_escape_string($db, $devicedesc);
|
|
if ($namesuppld && $nameunique) {
|
|
// modify the table
|
|
$addqry = ("insert into devices(devicename,devicedesc,group_flag,active_flag) values(\"$devicename\",\"$devicedesc\",\"$group_flag\",\"$active_flag\")");
|
|
mysqli_query($db, $addqry);
|
|
}
|
|
}
|
|
}
|
|
if ($edit) {
|
|
if ($schedule) {
|
|
if ($delete) {
|
|
// delete entity
|
|
mysqli_query($db, "delete from events where eventid=\"$id\"");
|
|
}
|
|
if ($update) {
|
|
// do error checking
|
|
// sanitize text data
|
|
if ($start_date == NULL) $start_date = $today;
|
|
if ($last_date == NULL) $last_date = "0001-01-01";
|
|
if ($deferred_date == NULL) $deferred_date = "0001-01-01";
|
|
$start_date = fix_date($start_date);
|
|
$last_date = fix_date($last_date);
|
|
$deferred_date = fix_date($deferred_date);
|
|
// update the tasks table
|
|
mysqli_query($db, "update events
|
|
set task=\"$task\",device=\"$device\",start_date=\"$start_date\",last_date=\"$last_date\",deferred_flag=\"$deferred_flag\",
|
|
deferred_date=\"$deferred_date\",active_flag=\"$active_flag\"
|
|
where eventid=\"$id\"");
|
|
}
|
|
}
|
|
if ($tasks) {
|
|
if ($delete) {
|
|
// check for scheduled maintenance for this entity
|
|
if (mysqli_num_rows(mysqli_query($db, "select eventid from events where task=\"$id\""))) {
|
|
$hasevents = true;
|
|
$errorstack[] = "<img src=\"icons/exclamation-red.png\" border=\"0\"> Task has been scheduled maintenance and cannot be deleted.<br>";
|
|
} else {
|
|
$hasevents = false;
|
|
}
|
|
if (!$hasevents) {
|
|
// delete entity
|
|
mysqli_query($db, "delete from tasks where taskid=\"$id\"");
|
|
}
|
|
}
|
|
if ($update) {
|
|
// do error checking
|
|
// test for name supplied
|
|
if (strlen(trim($taskname))) {
|
|
$namesuppld = true;
|
|
} else {
|
|
$namesuppld = false;
|
|
$errorstack[] = "<img src=\"icons/exclamation-red.png\" border=\"0\"> Task name cannot be blank.<br>";
|
|
}
|
|
// test for name unique
|
|
if (mysqli_num_rows(mysqli_query($db, "select taskid from tasks where taskname=\"$taskname\" and taskid!=\"$id\""))) {
|
|
if (mysqli_num_rows(mysqli_query($db, "select taskid from tasks where taskname=\"$taskname\""))) {
|
|
$nameunique = false;
|
|
$errorstack[] = "<img src=\"icons/exclamation-red.png\" border=\"0\"> Task name already exists.<br>";
|
|
} else {
|
|
$nameunique = true;
|
|
}
|
|
} else {
|
|
$nameunique = true;
|
|
}
|
|
// sanitize text data
|
|
$taskname = mysqli_real_escape_string($db, $taskname);
|
|
$taskdesc = mysqli_real_escape_string($db, $taskdesc);
|
|
$refdoc_name = mysqli_real_escape_string($db, $refdoc_name);
|
|
$refdoc_url = mysqli_real_escape_string($db, $refdoc_url);
|
|
if ($namesuppld && $nameunique) {
|
|
// update the tasks table
|
|
mysqli_query($db, "update tasks
|
|
set taskname=\"$taskname\",taskdesc=\"$taskdesc\",frequency=\"$frequency\",period=\"$period\",weekdays_only=\"$weekdays_only\",
|
|
nextdue_relative=\"$nextdue_relative\",refdoc_name=\"$refdoc_name\",refdoc_url=\"$refdoc_url\",active_flag=\"$active_flag\"
|
|
where taskid=\"$id\"");
|
|
}
|
|
}
|
|
}
|
|
if ($devices) {
|
|
if ($delete) {
|
|
// check for scheduled maintenance for this device
|
|
if (mysqli_num_rows(mysqli_query($db, "select eventid from events where device=\"$id\""))) {
|
|
$hasevents = true;
|
|
$errorstack[] = "<img src=\"icons/exclamation-red.png\" border=\"0\"> Device has scheduled maintenance and cannot be deleted.<br>";
|
|
} else {
|
|
$hasevents = false;
|
|
}
|
|
if (!$hasevents) {
|
|
// delete entity
|
|
mysqli_query($db, "delete from devices where deviceid=\"$id\"");
|
|
}
|
|
}
|
|
if ($update) {
|
|
// do error checking
|
|
// test for name supplied
|
|
if (strlen(trim($devicename))) {
|
|
$namesuppld = true;
|
|
} else {
|
|
$namesuppld = false;
|
|
$errorstack[] = "<img src=\"icons/exclamation-red.png\" border=\"0\"> Device name cannot be blank.<br>";
|
|
}
|
|
// test for name unique
|
|
if (mysqli_num_rows(mysqli_query($db, "select deviceid from devices where devicename=\"$devicename\" and deviceid!=\"$id\""))) {
|
|
if (mysqli_num_rows(mysqli_query($db, "select deviceid from devices where devicename=\"$devicename\""))) {
|
|
$nameunique = false;
|
|
$errorstack[] = "<img src=\"icons/exclamation-red.png\" border=\"0\"> Device name already exists.<br>";
|
|
} else {
|
|
$nameunique = true;
|
|
}
|
|
} else {
|
|
$nameunique = true;
|
|
}
|
|
// sanitize name and description
|
|
$devicename = mysqli_real_escape_string($db, $devicename);
|
|
$devicedesc = mysqli_real_escape_string($db, $devicedesc);
|
|
if ($namesuppld && $nameunique) {
|
|
// update the devices table
|
|
mysqli_query($db, "update devices set devicename=\"$devicename\",devicedesc=\"$devicedesc\",group_flag=\"$group_flag\",active_flag=\"$active_flag\" where deviceid=\"$id\"");
|
|
// update the devicegroups table
|
|
mysqli_query($db, "delete from devicegroups where groupdevice=\"$id\"");
|
|
if ($group_flag) {
|
|
foreach ($members as $member) {
|
|
mysqli_query($db, "insert into devicegroups(groupdevice,memberdevice) values(\"$id\",\"$member\")");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// **** END DATABASE OPERATIONS ****
|
|
|
|
framework("begin", "$logname", "Scheduled Maintenance", $print);
|
|
|
|
//var_dump($_REQUEST);
|
|
|
|
pagetable("begin");
|
|
|
|
pageblock("left", "begin");
|
|
sidemenu();
|
|
pageblock("left", "end");
|
|
|
|
pageblock("right", "begin");
|
|
banner($print);
|
|
if ($loggedin) {
|
|
echo "
|
|
<form method=\"post\" action=\"schedmaint.php\">
|
|
<br><center>
|
|
<input type=\"submit\" name=\"upcoming\" value=\"View Upcoming\">
|
|
<input type=\"submit\" name=\"devices\" value=\"Manage Devices\">
|
|
<input type=\"submit\" name=\"tasks\" value=\"Manage Tasks\">
|
|
<input type=\"submit\" name=\"schedule\" value=\"Maintenance Schedule\">
|
|
</center><br><hr>
|
|
</form>
|
|
";
|
|
}
|
|
// display any errors from database operations
|
|
if (count($errorstack)) {
|
|
foreach ($errorstack as $errorline) {
|
|
echo "$errorline<br>";
|
|
}
|
|
}
|
|
|
|
if ($action) {
|
|
// pull current values from database
|
|
$currentvalues = mysqli_fetch_assoc(mysqli_query($db, "select * from events where eventid=$id"));
|
|
extract($currentvalues);
|
|
$taskname = dblookup($db, "tasks", "taskid", "taskname", $task);
|
|
$devicename = dblookup($db, "devices", "deviceid", "devicename", $device);
|
|
// display form to complete or defer
|
|
echo "
|
|
<table border=\"0\" cellpadding=\"20\"><tr><td><b> Task : </b> $taskname </td><td><b> Device : </b> $devicename </td></tr></table>
|
|
<hr><br>
|
|
<table border=\"0\" cellpadding=\"10\">
|
|
<tr><td>
|
|
<b>Complete Scheduled Maintenance</b><br><br>
|
|
<form method=\"post\" action=\"schedmaint.php?action=1\">
|
|
<table border=\"0\">
|
|
<tr><td>Date Completed: <input type=\"text\" name=\"completedate\" id=\"completedatepicker\" size=\"10\" maxlength=\"10\" value=\"$today\" title=\"Format: YYYY-MM-DD\"></td></tr>
|
|
<tr><td><input type=\"checkbox\" name=\"addlognote\" value=\"1\" checked>Add logbook note</td></tr>
|
|
</table><br>
|
|
<input type=\"hidden\" name=\"id\" value=\"$id\">
|
|
<input type=\"submit\" name=\"complete\" value=\"Complete\">
|
|
</td></tr></table>
|
|
<br><hr><br>
|
|
<table border=\"0\" cellpadding=\"10\">
|
|
<tr><td>
|
|
<b>Defer Scheduled Maintenance</b><br><br>
|
|
<form method=\"post\" action=\"schedmaint.php?action=1\">
|
|
<table border=\"0\">
|
|
<tr><td>Defer Until: <input type=\"text\" name=\"deferuntil\" id=\"deferdatepicker\" size=\"10\" maxlength=\"10\" value=\"$tomorrow\" title=\"Format: YYYY-MM-DD\"></tr>
|
|
</table><br>
|
|
<input type=\"hidden\" name=\"id\" value=\"$id\">
|
|
<input type=\"submit\" name=\"defer\" value=\"Defer\">
|
|
</td></tr></table>
|
|
</form>
|
|
";
|
|
} else if ($schedule) {
|
|
// manage maintenance schedule
|
|
if ($edit) {
|
|
// set form options for editing
|
|
$sectiontitle = "<b>Modify Event</b><br><br>";
|
|
$formtag = "<form method=\"post\" action=\"schedmaint.php?schedule=1&edit=1\">";
|
|
$buttontags = "
|
|
<input type=\"hidden\" name=\"id\" value=\"$id\">
|
|
<input type=\"submit\" name=\"update\" value=\"Update Event\">
|
|
<input type=\"submit\" name=\"delete\" value=\"Delete Event\">
|
|
<input type=\"submit\" name=\"reset\" value=\"Reset\"><br>
|
|
";
|
|
// pull current values from database
|
|
$currentvalues = mysqli_fetch_assoc(mysqli_query($db, "select * from events where eventid=$id"));
|
|
extract($currentvalues);
|
|
if ($active_flag) {
|
|
$activetag = "<input type=\"checkbox\" name=\"active_flag\" value=\"1\" checked>";
|
|
} else {
|
|
$activetag = "<input type=\"checkbox\" name=\"active_flag\" value=\"1\">";
|
|
}
|
|
if ($deferred_flag) {
|
|
$deferredtag = "<input type=\"checkbox\" name=\"deferred_flag\" value=\"1\" checked>";
|
|
} else {
|
|
$deferredtag = "<input type=\"checkbox\" name=\"deferred_flag\" value=\"1\">";
|
|
}
|
|
if ($start_date == "0001-01-01") $start_date = $today;
|
|
//if ($last_date == "0001-01-01") $last_date = "";
|
|
if ($deferred_date == "0001-01-01") $deferred_date = $tomorrow;
|
|
$deferuntiltag = "<input type=\"text\" name=\"deferred_date\" id=\"deferdatepicker\" size=\"10\" maxlength=\"10\" value=\"$deferred_date\" title=\"Format: YYYY-MM-DD\">";
|
|
$startdatetag = "<input type=\"text\" name=\"start_date\" id=\"startdatepicker\" size=\"10\" maxlength=\"10\" value=\"$start_date\" title=\"Format: YYYY-MM-DD\">";
|
|
$lastdatetag = "<input type=\"text\" name=\"last_date\" id=\"completedatepicker\" size=\"10\" maxlength=\"10\" value=\"$last_date\" title=\"Format: YYYY-MM-DD\">";
|
|
} else {
|
|
// set form options for add
|
|
$sectiontitle = "<b>Add Scheduled Maintenance</b><br><br>";
|
|
$formtag = "<form method=\"post\" action=\"schedmaint.php?schedule=1\">";
|
|
$buttontags = "
|
|
<input type=\"submit\" name=\"add\" value=\"Schedule this task\">
|
|
";
|
|
// set default values
|
|
$deferredtag = "<input type=\"checkbox\" name=\"deferred_flag\" value=\"1\">";
|
|
$deferuntiltag = "<input type=\"text\" name=\"deferred_date\" id=\"deferdatepicker\" size=\"10\" maxlength=\"10\" title=\"Format: YYYY-MM-DD\">";
|
|
$activetag = "<input type=\"checkbox\" name=\"active_flag\" value=\"1\" checked>";
|
|
$startdatetag = "<input type=\"text\" name=\"start_date\" id=\"startdatepicker\" size=\"10\" maxlength=\"10\" value=\"$today\" title=\"Format: YYYY-MM-DD\">";
|
|
$lastdatetag = "<input type=\"text\" name=\"last_date\" id=\"completedatepicker\" size=\"10\" maxlength=\"10\" title=\"Format: YYYY-MM-DD\">";
|
|
}
|
|
// display form
|
|
echo "
|
|
<table border=\"0\"><tr>
|
|
<td><center>$sectiontitle</center>
|
|
$formtag
|
|
<table border=\"0\" cellpadding=\"10\">
|
|
<tr>
|
|
<td>Task: <select name=\"task\">
|
|
<option value=\"0\">Select a Task</option>
|
|
";
|
|
$taskrow = mysqli_query($db, "select * from tasks");
|
|
while ($taskitem = mysqli_fetch_assoc($taskrow)) {
|
|
if ($taskitem["active_flag"] == 1) {
|
|
if ($task == $taskitem["taskid"]) {
|
|
printf("<option value=\"%s\" title=\"%s\" selected>%s</option>", $taskitem["taskid"], $taskitem["taskdesc"], $taskitem["taskname"]);
|
|
} else {
|
|
printf("<option value=\"%s\" title=\"%s\">%s</option>", $taskitem["taskid"], $taskitem["taskdesc"], $taskitem["taskname"]);
|
|
}
|
|
}
|
|
}
|
|
echo "
|
|
</select></td>
|
|
<td>Device: <select name=\"device\">
|
|
<option value=\"0\">Select a Device</option>
|
|
";
|
|
$devicerow = mysqli_query($db, "select * from devices");
|
|
while ($deviceitem = mysqli_fetch_assoc($devicerow)) {
|
|
if ($deviceitem["active_flag"] == 1) {
|
|
if ($device == $deviceitem["deviceid"]) {
|
|
printf("<option value=\"%s\" title=\"%s\" selected>%s</option>", $deviceitem["deviceid"], $deviceitem["devicedesc"], $deviceitem["devicename"]);
|
|
} else {
|
|
printf("<option value=\"%s\" title=\"%s\">%s</option>", $deviceitem["deviceid"], $deviceitem["devicedesc"], $deviceitem["devicename"]);
|
|
}
|
|
}
|
|
}
|
|
echo "
|
|
</select></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Start Date: $startdatetag </td><td>Last Completed Date: $lastdatetag </td>
|
|
</tr>
|
|
<tr>
|
|
<td>Defer this event: $deferredtag </td><td>Defer Until: $deferuntiltag </td>
|
|
</tr>
|
|
<tr>
|
|
<td>Active: $activetag </td>
|
|
</tr>
|
|
</table>
|
|
$buttontags
|
|
</form></td>
|
|
</tr>
|
|
</table>
|
|
<br><hr>
|
|
";
|
|
// show table of current schedule
|
|
$existingdata = mysqli_query($db, "select * from events");
|
|
echo "
|
|
<b>Existing Events</b> <font size=\"-1\">Click on the Event ID to edit.</font><br><br>
|
|
<table border=\"1\">
|
|
<tr><th>Event ID</th><th>Task</th><th>Device</th><th>Start Date</th><th>Last<br>Completed</th><th>Deferred</th><th>Deferred<br>Until<th>Active</th></tr>
|
|
";
|
|
while ($tablerow = mysqli_fetch_assoc($existingdata)) {
|
|
extract($tablerow);
|
|
if ($start_date == "0001-01-01") $start_date = $today;
|
|
if ($last_date == "0001-01-01") $last_date = "";
|
|
if ($deferred_date == "0001-01-01") $deferred_date = "";
|
|
if ($active_flag) {
|
|
$statdef = "<img src=\"icons/tick.png\" title=\"active\" alt=\"active\">";
|
|
} else {
|
|
$statdef = "<img src=\"icons/cross.png\" title=\"inactive\" alt=\"inactive\">";
|
|
}
|
|
if ($deferred_flag) {
|
|
$deferredflag = "<img src=\"icons/tick.png\" title=\"deferred\" alt=\"deferred\">";
|
|
} else {
|
|
$deferredflag = "<img src=\"icons/cross.png\" title=\"not deferred\" alt=\"not deferred\">";
|
|
}
|
|
$taskdata = mysqli_fetch_assoc(mysqli_query($db, "select * from tasks where taskid=\"$task\""));
|
|
extract($taskdata, EXTR_PREFIX_ALL, "taskdata");
|
|
$devicedata = mysqli_fetch_assoc(mysqli_query($db, "select * from devices where deviceid=\"$device\""));
|
|
extract($devicedata, EXTR_PREFIX_ALL, "devicedata");
|
|
if ($taskdata_period == "once") {
|
|
$tasktitle = "One-time event";
|
|
} else {
|
|
$tasktitle = "Repeat every $taskdata_frequency $taskdata_period";
|
|
}
|
|
printf(
|
|
"
|
|
<tr>
|
|
<td><a href=\"schedmaint.php?schedule=1&edit=1&id=%s\">%s</a></td>
|
|
<td title=\"%s\">%s</td>
|
|
<td>%s</td>
|
|
<td>%s</td>
|
|
<td>%s</td>
|
|
<td align=\"center\">%s</td>
|
|
<td>%s</td>
|
|
<td align=\"center\">%s</td>
|
|
</tr>",
|
|
$eventid,
|
|
$eventid,
|
|
$tasktitle,
|
|
$taskdata_taskname,
|
|
$devicedata_devicename,
|
|
$start_date,
|
|
$last_date,
|
|
$deferredflag,
|
|
$deferred_date,
|
|
$statdef
|
|
);
|
|
}
|
|
echo "</table>";
|
|
} else if ($tasks) {
|
|
// manage tasks
|
|
if ($edit) {
|
|
// set form options for editing
|
|
$sectiontitle = "<b>Modify Task</b><br><br>";
|
|
$formtag = "<form method=\"post\" action=\"schedmaint.php?tasks=1&edit=1\">";
|
|
$buttontags = "
|
|
<input type=\"hidden\" name=\"id\" value=\"$id\">
|
|
<input type=\"submit\" name=\"update\" value=\"Update Task\">
|
|
<input type=\"submit\" name=\"delete\" value=\"Delete Task\">
|
|
<input type=\"submit\" name=\"reset\" value=\"Reset\"><br>
|
|
";
|
|
// pull current values from database
|
|
$currentvalues = mysqli_fetch_assoc(mysqli_query($db, "select * from tasks where taskid=$id"));
|
|
extract($currentvalues);
|
|
$perioddef = $period;
|
|
if ($active_flag) {
|
|
$activetag = "<input type=\"checkbox\" name=\"active_flag\" value=\"1\" checked>";
|
|
} else {
|
|
$activetag = "<input type=\"checkbox\" name=\"active_flag\" value=\"1\">";
|
|
}
|
|
if ($weekdays_only) {
|
|
$wdotag = "<input type=\"checkbox\" name=\"weekdays_only\" value=\"1\" checked>";
|
|
} else {
|
|
$wdotag = "<input type=\"checkbox\" name=\"weekdays_only\" value=\"1\">";
|
|
}
|
|
if ($nextdue_relative) {
|
|
$nextduetag = "<input type=\"radio\" name=\"nextdue_relative\" value=\"0\">Absolute <input type=\"radio\" name=\"nextdue_relative\" value=\"1\" checked>Relative";
|
|
} else {
|
|
$nextduetag = "<input type=\"radio\" name=\"nextdue_relative\" value=\"0\" checked>Absolute <input type=\"radio\" name=\"nextdue_relative\" value=\"1\">Relative";
|
|
}
|
|
} else {
|
|
// set form options for add
|
|
$sectiontitle = "<b>Add New Task</b><br><br>";
|
|
$formtag = "<form method=\"post\" action=\"schedmaint.php?tasks=1\">";
|
|
$perioddef = "once";
|
|
$frequency = 1;
|
|
$buttontags = "
|
|
<input type=\"submit\" name=\"add\" value=\"Add Task\">
|
|
";
|
|
// set default values
|
|
$wdotag = "<input type=\"checkbox\" name=\"weekdays_only\" value=\"1\" checked>";
|
|
$nextduetag = "<input type=\"radio\" name=\"nextdue_relative\" value=\"0\" checked>Absolute <input type=\"radio\" name=\"nextdue_relative\" value=\"1\">Relative";
|
|
$activetag = "<input type=\"checkbox\" name=\"active_flag\" value=\"1\" checked>";
|
|
}
|
|
// display form
|
|
echo "
|
|
<table border=\"0\">
|
|
<tr><td>
|
|
<center>$sectiontitle</center>
|
|
$formtag
|
|
<table border=\"0\">
|
|
<tr><td>
|
|
Task Name: <input type=\"text\" name=\"taskname\" size=\"40\" value=\"$taskname\"><br><br>
|
|
Task Description:<br><textarea rows=\"4\" cols=\"60\" name=\"taskdesc\" wrap=\"soft\">$taskdesc</textarea><br><br>
|
|
<hr>
|
|
<center>Schedule</center><br>
|
|
Repeat every: <input type=\"text\" name=\"frequency\" size=\"3\" value=\"$frequency\">
|
|
<select name=\"period\">
|
|
";
|
|
$periodopts = array("once", "days", "weeks", "months", "years");
|
|
foreach ($periodopts as $periodchoice) {
|
|
if ($periodchoice == $perioddef) {
|
|
echo "<option selected>$periodchoice</option>";
|
|
} else {
|
|
echo "<option>$periodchoice</option>";
|
|
}
|
|
}
|
|
echo "
|
|
</select>
|
|
Weekdays Only: {$wdotag}<br><br>
|
|
Due Date Calculation: <img src=\"icons/question.png\" title=\"Absolute: Next due date is calculated based on the last due date. Relative: Next due date is based on the last completed date.\"> $nextduetag<br><br><hr>
|
|
Reference Documentation: <input type=\"text\" name=\"refdoc_name\" size=\"40\" value=\"$refdoc_name\"><br><br>
|
|
Reference Documentation URL:<br><textarea rows=\"2\" cols=\"60\" name=\"refdoc_url\" wrap=\"soft\">$refdoc_url</textarea><br><br>
|
|
Active: $activetag<br><br>
|
|
</td></tr>
|
|
</table>
|
|
$buttontags
|
|
</form>
|
|
</td></tr></table>
|
|
<br><hr>
|
|
";
|
|
// show table of current tasks
|
|
$existingdata = mysqli_query($db, "select * from tasks");
|
|
echo "
|
|
<b>Existing Tasks</b> <font size=\"-1\">Click on the Task Name to edit.</font><br><br>
|
|
<table border=\"1\">
|
|
<tr><th>Task Name</th><th>Task Description</th><th>Repeat Every</th><th>Due Date<br>Calculation</th><th>Weekdays<br>Only</th><th>Reference</th><th>Active</th></tr>
|
|
";
|
|
while ($tablerow = mysqli_fetch_assoc($existingdata)) {
|
|
extract($tablerow);
|
|
if ($active_flag) {
|
|
$statdef = "<img src=\"icons/tick.png\" title=\"active\" alt=\"active\">";
|
|
} else {
|
|
$statdef = "<img src=\"icons/cross.png\" title=\"inactive\" alt=\"inactive\">";
|
|
}
|
|
if ($period == "once") {
|
|
$rptstrg = "one time only";
|
|
} else {
|
|
$rptstrg = "$frequency $period";
|
|
}
|
|
|
|
if ($nextdue_relative) {
|
|
$duecalc = "Relative";
|
|
} else {
|
|
$duecalc = "Absolute";
|
|
}
|
|
if ($refdoc_name) {
|
|
$refstrg = "$refdoc_name";
|
|
if ($refdoc_url) {
|
|
$refstrg = "<a href=\"$refdoc_url\" target=\"_blank\">$refdoc_name</a>";
|
|
}
|
|
} else {
|
|
$refstrg = "";
|
|
}
|
|
if ($weekdays_only) {
|
|
$wdoflag = "<img src=\"icons/tick.png\" title=\"active\" alt=\"active\">";
|
|
} else {
|
|
$wdoflag = "<img src=\"icons/cross.png\" title=\"inactive\" alt=\"inactive\">";
|
|
}
|
|
printf(
|
|
"
|
|
<tr>
|
|
<td><a href=\"schedmaint.php?tasks=1&edit=1&id=%s\">%s</a></td>
|
|
<td>%s</td>
|
|
<td>%s</td>
|
|
<td align=\"center\">%s</td>
|
|
<td align=\"center\">%s</td>
|
|
<td>%s</td>
|
|
<td align=\"center\">%s</td>
|
|
</tr>",
|
|
$taskid,
|
|
$taskname,
|
|
$taskdesc,
|
|
$rptstrg,
|
|
$duecalc,
|
|
$wdoflag,
|
|
$refstrg,
|
|
$statdef
|
|
);
|
|
}
|
|
echo "</table>";
|
|
} else if ($devices) {
|
|
// manage devices
|
|
if ($edit) {
|
|
// set form options for editing
|
|
$sectiontitle = "<b>Modify Device</b><br><br>";
|
|
$formtag = "<form method=\"post\" action=\"schedmaint.php?devices=1&edit=1\">";
|
|
$buttontags = "
|
|
<input type=\"hidden\" name=\"id\" value=\"$id\">
|
|
<input type=\"submit\" name=\"update\" value=\"Update Device\">
|
|
<input type=\"submit\" name=\"delete\" value=\"Delete Device\">
|
|
<input type=\"submit\" name=\"reset\" value=\"Reset\"><br>
|
|
";
|
|
// pull current values from database
|
|
$currentvalues = mysqli_fetch_assoc(mysqli_query($db, "select * from devices where deviceid=$id"));
|
|
extract($currentvalues);
|
|
if ($group_flag) {
|
|
$showgrouptable = true;
|
|
$grouptag = "<input type=\"checkbox\" name=\"group_flag\" value=\"1\" checked>";
|
|
} else {
|
|
$showgrouptable = false;
|
|
$grouptag = "<input type=\"checkbox\" name=\"group_flag\" value=\"1\">";
|
|
}
|
|
if ($active_flag) {
|
|
$activetag = "<input type=\"checkbox\" name=\"active_flag\" value=\"1\" checked>";
|
|
} else {
|
|
$activetag = "<input type=\"checkbox\" name=\"active_flag\" value=\"1\">";
|
|
}
|
|
} else {
|
|
// set form options for add
|
|
$sectiontitle = "<b>Add New Device</b><br><br>";
|
|
$formtag = "<form method=\"post\" action=\"schedmaint.php?devices=1\">";
|
|
$showgrouptable = false;
|
|
$buttontags = "
|
|
<input type=\"submit\" name=\"add\" value=\"Add Device\">
|
|
";
|
|
// set default values
|
|
$activetag = "<input type=\"checkbox\" name=\"active_flag\" value=\"1\" checked>";
|
|
$grouptag = "<input type=\"checkbox\" name=\"group_flag\" value=\"1\">";
|
|
}
|
|
// display form
|
|
echo "
|
|
$sectiontitle
|
|
$formtag
|
|
<table border=\"0\">
|
|
<tr><td>
|
|
Device Name: <input type=\"text\" name=\"devicename\" size=\"40\" value=\"$devicename\"><br><br>
|
|
Device Description: <textarea rows=\"2\" cols=\"60\" name=\"devicedesc\" wrap=\"soft\">$devicedesc</textarea><br><br>
|
|
<font title=\"Device is a container that represents a group of other devices.
|
|
First, check this box before adding or updating this device, then go back and edit it to select the devices it contains.\">
|
|
Device represents a group of devices:</font> $grouptag<br><br>
|
|
";
|
|
if ($showgrouptable) {
|
|
$existingdevs = mysqli_query($db, "select * from devices where deviceid!=$id and active_flag=\"1\"");
|
|
echo "
|
|
<b>Existing members of this group</b><br><br>
|
|
<table border=\"1\">
|
|
<tr><th>Device Name</th><th>Device Description</th><th>Member</th></tr>
|
|
";
|
|
while ($grouprow = mysqli_fetch_assoc($existingdevs)) {
|
|
extract($grouprow, EXTR_PREFIX_ALL, "gtbl");
|
|
if (mysqli_num_rows(mysqli_query($db, "select groupid from devicegroups where memberdevice=$gtbl_deviceid and groupdevice=$id"))) {
|
|
$memberdef = "<input type=\"checkbox\" name=\"members[]\" value=\"$gtbl_deviceid\" checked>";
|
|
} else {
|
|
$memberdef = "<input type=\"checkbox\" name=\"members[]\" value=\"$gtbl_deviceid\">";
|
|
}
|
|
printf(
|
|
"
|
|
<tr>
|
|
<td>%s</td>
|
|
<td>%s</td>
|
|
<td align=\"center\">%s</td>
|
|
</tr>",
|
|
$gtbl_devicename,
|
|
$gtbl_devicedesc,
|
|
$memberdef
|
|
);
|
|
}
|
|
echo "</table><br>";
|
|
}
|
|
echo "
|
|
Active: $activetag<br><br>
|
|
</td></tr>
|
|
</table>
|
|
$buttontags
|
|
</form>
|
|
<br><hr>
|
|
";
|
|
// show table of current devices
|
|
$existingdata = mysqli_query($db, "select * from devices");
|
|
echo "
|
|
<b>Existing Devices</b> <font size=\"-1\">Click on the Device ID to edit.</font><br><br>
|
|
<table border=\"1\">
|
|
<tr><th>Device ID</th><th>Device Name</th><th>Device Description</th><th>Group</th><th>Active</th></tr>
|
|
";
|
|
while ($tablerow = mysqli_fetch_assoc($existingdata)) {
|
|
extract($tablerow);
|
|
if ($group_flag) {
|
|
$groupdef = "<img src=\"icons/tick.png\" title=\"This is a group\" alt=\"This is a group\">";
|
|
} else {
|
|
$groupdef = "<img src=\"icons/cross.png\" title=\"This is a single device\" alt=\"This is a single device\">";
|
|
}
|
|
if ($active_flag) {
|
|
$statdef = "<img src=\"icons/tick.png\" title=\"active\" alt=\"active\">";
|
|
} else {
|
|
$statdef = "<img src=\"icons/cross.png\" title=\"inactive\" alt=\"inactive\">";
|
|
}
|
|
printf(
|
|
"
|
|
<tr>
|
|
<td><a href=\"schedmaint.php?devices=1&edit=1&id=%s\">%s</a></td>
|
|
<td>%s</td>
|
|
<td>%s</td>
|
|
<td align=\"center\">%s</td>
|
|
<td align=\"center\">%s</td>
|
|
</tr>",
|
|
$deviceid,
|
|
$deviceid,
|
|
$devicename,
|
|
$devicedesc,
|
|
$groupdef,
|
|
$statdef
|
|
);
|
|
}
|
|
echo "</table>";
|
|
} else {
|
|
$ucevents = get_upcoming_events();
|
|
|
|
// sort the upcoming events
|
|
function uc_cmp($a, $b)
|
|
{
|
|
return strcmp($a["duedate"], $b["duedate"]);
|
|
}
|
|
uasort($ucevents, 'uc_cmp');
|
|
|
|
// show upcoming events table
|
|
echo "
|
|
<font size=\"+1\"><b>Upcoming Scheduled Maintenance</b></font><br><br>
|
|
<table width=\"100%\" border=\"1\" cellpadding=\"5\">
|
|
<tr>
|
|
<th>Next Due</th><th>Device</th><th>Maintenance</th><th>Last Done</th>
|
|
</tr>
|
|
";
|
|
foreach ($ucevents as $ucline) {
|
|
extract($ucline);
|
|
printf(
|
|
"
|
|
<tr>
|
|
<td><a href=\"schedmaint.php?action=1&id=%s\" title=\"Click to complete or defer this scheduled maintenance event\">%s</a></td>
|
|
<td><font title=\"%s\">%s</font></td>
|
|
<td><font title=\"%s\">%s</font></td>
|
|
<td>%s</td>
|
|
</tr>",
|
|
$eventdata_eventid,
|
|
$duedatestrg,
|
|
$devicedata_devicedesc,
|
|
$devicedata_devicename,
|
|
$taskdata_taskdesc,
|
|
$taskdata_taskname,
|
|
$lastdatestrg
|
|
);
|
|
}
|
|
echo "
|
|
</table>
|
|
<br><hr><br>
|
|
";
|
|
|
|
// build array of deferred events
|
|
$defeventsqry = mysqli_query($db, "select * from events where active_flag=\"1\" and deferred_flag=\"1\" and deferred_date > \"$today\" order by deferred_date asc");
|
|
$defevents = array();
|
|
while ($defeventrow = mysqli_fetch_assoc($defeventsqry)) {
|
|
// provide eventid,task,device,start_date,last_date,deferred_flag,deferred_date,active_flag
|
|
extract($defeventrow, EXTR_PREFIX_ALL, "def");
|
|
// provide deviceid,devicename,devicedesc,group_flag,active_flag
|
|
$devicedata = mysqli_fetch_assoc(mysqli_query($db, "select * from devices where deviceid=\"$def_device\""));
|
|
extract($devicedata, EXTR_PREFIX_ALL, "devicedata");
|
|
// provide taskid,taskname,taskdesc,frequency,period,weekdays_only,nextdue_relative,refdoc_name,refdoc_url,active_flag
|
|
$taskdata = mysqli_fetch_assoc(mysqli_query($db, "select * from tasks where taskid=\"$def_task\""));
|
|
extract($taskdata, EXTR_PREFIX_ALL, "taskdata");
|
|
if (! ($taskdata_period == "once" && $def_last_date > $def_start_date)) {
|
|
if ($def_last_date == "0001-01-01") {
|
|
$lastdatestrg = "never";
|
|
} else {
|
|
$lastdatestrg = "$def_last_date";
|
|
}
|
|
$defeventline = array(
|
|
'def_eventid' => $def_eventid,
|
|
'def_deferred_date' => $def_deferred_date,
|
|
'devicedata_devicedesc' => $devicedata_devicedesc,
|
|
'devicedata_devicename' => $devicedata_devicename,
|
|
'taskdata_taskdesc' => $taskdata_taskdesc,
|
|
'taskdata_taskname' => $taskdata_taskname,
|
|
'lastdatestrg' => $lastdatestrg
|
|
);
|
|
$defevents[] = $defeventline;
|
|
}
|
|
}
|
|
|
|
// show deferred events table
|
|
echo "
|
|
<font size=\"+1\"><b>Deferred Scheduled Maintenance</b></font><br><br>
|
|
<table width=\"100%\" border=\"1\" cellpadding=\"5\">
|
|
<tr>
|
|
<th>Deferred Until</th><th>Device</th><th>Maintenance</th><th>Last Done</th>
|
|
</tr>
|
|
";
|
|
foreach ($defevents as $defline) {
|
|
extract($defline);
|
|
printf(
|
|
"
|
|
<tr>
|
|
<td><a href=\"schedmaint.php?action=1&id=%s\" title=\"Click to complete or defer this scheduled maintenance event\"><font color=\"#FFA500\">%s</font></a></td>
|
|
<td><font title=\"%s\">%s</font></td>
|
|
<td><font title=\"%s\">%s</font></td>
|
|
<td>%s</td>
|
|
</tr>",
|
|
$def_eventid,
|
|
$def_deferred_date,
|
|
$devicedata_devicedesc,
|
|
$devicedata_devicename,
|
|
$taskdata_taskdesc,
|
|
$taskdata_taskname,
|
|
$lastdatestrg
|
|
);
|
|
}
|
|
echo "
|
|
</table>
|
|
<br><hr>
|
|
";
|
|
}
|
|
|
|
|
|
banner($print);
|
|
pageblock("right", "end");
|
|
pagetable("end");
|
|
|
|
framework("end", "", "", $print);
|