Files
OpenLog/distfiles/schedmaint.php

917 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=\"0000-00-00\" 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&note=$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\">&nbsp;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\">&nbsp;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\">&nbsp;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\">&nbsp;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\">&nbsp;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\">&nbsp;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\">&nbsp;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\">&nbsp;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\">&nbsp;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\">&nbsp;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\">&nbsp;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\">&nbsp;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\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type=\"submit\" name=\"devices\" value=\"Manage Devices\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type=\"submit\" name=\"tasks\" value=\"Manage Tasks\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<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>&nbsp; $taskname </td><td><b> Device : </b>&nbsp; $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: &nbsp; <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: &nbsp; <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\">&nbsp;&nbsp;&nbsp;&nbsp;
<input type=\"submit\" name=\"delete\" value=\"Delete Event\">&nbsp;&nbsp;&nbsp;&nbsp;
<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: &nbsp;<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: &nbsp;<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: &nbsp; $startdatetag </td><td>Last Completed Date: &nbsp; $lastdatetag </td>
</tr>
<tr>
<td>Defer this event: &nbsp; $deferredtag </td><td>Defer Until: &nbsp; $deferuntiltag </td>
</tr>
<tr>
<td>Active: &nbsp; $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>&nbsp;&nbsp;&nbsp;<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 == "0000-00-00") $last_date = "";
if ($deferred_date == "0000-00-00") $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\">&nbsp;&nbsp;&nbsp;&nbsp;
<input type=\"submit\" name=\"delete\" value=\"Delete Task\">&nbsp;&nbsp;&nbsp;&nbsp;
<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&nbsp;&nbsp;&nbsp;<input type=\"radio\" name=\"nextdue_relative\" value=\"1\" checked>Relative";
} else {
$nextduetag = "<input type=\"radio\" name=\"nextdue_relative\" value=\"0\" checked>Absolute&nbsp;&nbsp;&nbsp;<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&nbsp;&nbsp;&nbsp;<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: &nbsp;<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: &nbsp;<input type=\"text\" name=\"frequency\" size=\"3\" value=\"$frequency\">&nbsp;&nbsp;
<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>&nbsp;&nbsp;&nbsp;&nbsp;
Weekdays Only: &nbsp;{$wdotag}<br><br>
Due Date Calculation: &nbsp;<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.\">&nbsp;&nbsp;$nextduetag<br><br><hr>
Reference Documentation: &nbsp;<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: &nbsp;$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>&nbsp;&nbsp;&nbsp;<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\">&nbsp;&nbsp;&nbsp;&nbsp;
<input type=\"submit\" name=\"delete\" value=\"Delete Device\">&nbsp;&nbsp;&nbsp;&nbsp;
<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: &nbsp;<input type=\"text\" name=\"devicename\" size=\"40\" value=\"$devicename\"><br><br>
Device Description: &nbsp;<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> &nbsp;$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: &nbsp;$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>&nbsp;&nbsp;&nbsp;<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 == "0000-00-00") {
$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);