Files
OpenLog/distfiles/schedmaint.php
2026-02-10 22:18:42 -05:00

895 lines
37 KiB
PHP

<?php
/*
blankpage.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=mysqli_real_escape_string($db,$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) {
// 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
$start_date=mysqli_real_escape_string($db,$start_date);
$last_date=mysqli_real_escape_string($db,$last_date);
$deferred_date=mysqli_real_escape_string($db,$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) {
if ($start_date==NULL) $start_date=$today;
if ($last_date==NULL) $last_date="0000-00-00";
if ($deferred_date==NULL) $deferred_date="0000-00-00";
$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
$start_date=mysqli_real_escape_string($db,$start_date);
$last_date=mysqli_real_escape_string($db,$last_date);
$deferred_date=mysqli_real_escape_string($db,$deferred_date);
// update the tasks table
if ($start_date==NULL) $start_date=$today;
if ($last_date==NULL) $last_date="0000-00-00";
if ($deferred_date==NULL) $deferred_date="0000-00-00";
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=="0000-00-00") $start_date=$today;
if ($last_date=="0000-00-00") $last_date="";
if ($deferred_date=="0000-00-00") $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=="0000-00-00") $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);
?>