984 lines
40 KiB
PHP
984 lines
40 KiB
PHP
<?php
|
|
/*
|
|
functions.php
|
|
OpenLog Online Logbook
|
|
Copyright (C) 2026 Rod Wright
|
|
|
|
SPDX-License-Identifier: GPL-2.0
|
|
*/
|
|
|
|
// test for correct installation
|
|
if (!file_exists("db.php")) {
|
|
echo "
|
|
<html>
|
|
<head>
|
|
<meta http-equiv=\"x-ua-compatible\" content=\"IE=edge\">
|
|
<title>Installation error</title>
|
|
</head>
|
|
<body>
|
|
Could not find the db.php file required for this installation.
|
|
</body>
|
|
</html>
|
|
";
|
|
exit();
|
|
}
|
|
|
|
include("db.php");
|
|
include("settings.php");
|
|
|
|
|
|
// build the basic color array
|
|
$basic_colors=array(
|
|
"White" => "#FFFFFF",
|
|
"Silver" => "#C0C0C0",
|
|
"Gray" => "#808080",
|
|
"Black" => "#000000",
|
|
"Red" => "#FF0000",
|
|
"Maroon" => "#800000",
|
|
"Orange" => "#FFA500",
|
|
"Yellow" => "#FFFF00",
|
|
"Olive" => "#808000",
|
|
"Lime" => "#00FF00",
|
|
"Green" => "#008000",
|
|
"Aqua" => "#00FFFF",
|
|
"Teal" => "#008080",
|
|
"Blue" => "#0000FF",
|
|
"Navy" => "#000080",
|
|
"Fuchsia" => "#FF00FF",
|
|
"Purple" => "#800080");
|
|
|
|
// Generic functions
|
|
|
|
function framework($option,$htmltitle,$pagetitle,$print) {
|
|
// generates html code for the beginning and end of all pages
|
|
if ($option=="begin") {
|
|
// generates everything down to the first horiz rule inclusive
|
|
// htmltitle is the page title that appears in the window titlebar
|
|
// pagetitle is what will appear as the title of the page itself
|
|
// print is whether to format for printing or not
|
|
if ($print) {
|
|
$bgcolor=P_BACKGROUND_COLOR;
|
|
$textcolor=P_TEXT_COLOR;
|
|
$linkcolor=P_LINK_COLOR;
|
|
$vlinkcolor=P_VLINK_COLOR;
|
|
$hdgcolor=P_HEADING_COLOR;
|
|
} else {
|
|
$bgcolor=BACKGROUND_COLOR;
|
|
$textcolor=TEXT_COLOR;
|
|
$linkcolor=LINK_COLOR;
|
|
$vlinkcolor=VLINK_COLOR;
|
|
$hdgcolor=HEADING_COLOR;
|
|
}
|
|
|
|
echo "
|
|
<html>
|
|
<head>
|
|
<title>$htmltitle</title>
|
|
<style type=\"text/css\">
|
|
* {font-family: Arial, Helvetica, sans-serif;}
|
|
table.mfentry {width: 550px; table-layout:fixed;}
|
|
td.forcewrap {word-wrap: break-word;}
|
|
</style>
|
|
<link href=\"jquery-ui/jquery-ui.css\" rel=\"stylesheet\">
|
|
<style>div.ui-datepicker{font-size:12px;}</style>
|
|
</head>
|
|
";
|
|
echo "
|
|
<body bgcolor=\"$bgcolor\" text=\"$textcolor\" link=\"$linkcolor\" vlink=\"$vlinkcolor\">
|
|
";
|
|
if ($htmltitle || $pagetitle) {
|
|
echo "
|
|
<font size=5 color=\"$hdgcolor\"><b> $htmltitle - $pagetitle</b></font><br>
|
|
";
|
|
}
|
|
} else if ($option=="end") {
|
|
// generates everything from the last horiz rule down to end of page
|
|
echo "
|
|
<hr><br><br>
|
|
";
|
|
if (defined("FOOTER_MESSAGE")) {
|
|
$footer_msg=FOOTER_MESSAGE;
|
|
echo "
|
|
<center>$footer_msg</center><br>
|
|
";
|
|
}
|
|
echo "
|
|
<script src=\"jquery-ui/external/jquery/jquery.js\"></script>
|
|
<script src=\"jquery-ui/jquery-ui.js\"></script>
|
|
<script>
|
|
|
|
$( \"#singledatepicker\" ).datepicker({
|
|
showOn: \"button\",
|
|
buttonImage: \"jquery-ui/images/calendar.gif\",
|
|
buttonImageOnly: true,
|
|
buttonText: \"Select date\",
|
|
inline: true,
|
|
showButtonPanel: true,
|
|
changeMonth: true,
|
|
changeYear: true,
|
|
dateFormat: \"yy-mm-dd\"
|
|
});
|
|
|
|
$( \"#startdatepicker\" ).datepicker({
|
|
showOn: \"button\",
|
|
buttonImage: \"jquery-ui/images/calendar.gif\",
|
|
buttonImageOnly: true,
|
|
buttonText: \"Select start date\",
|
|
inline: true,
|
|
showButtonPanel: true,
|
|
changeMonth: true,
|
|
changeYear: true,
|
|
dateFormat: \"yy-mm-dd\"
|
|
});
|
|
|
|
$( \"#enddatepicker\" ).datepicker({
|
|
showOn: \"button\",
|
|
buttonImage: \"jquery-ui/images/calendar.gif\",
|
|
buttonImageOnly: true,
|
|
buttonText: \"Select end date\",
|
|
inline: true,
|
|
showButtonPanel: true,
|
|
changeMonth: true,
|
|
changeYear: true,
|
|
dateFormat: \"yy-mm-dd\"
|
|
});
|
|
|
|
$( \"#completedatepicker\" ).datepicker({
|
|
showOn: \"button\",
|
|
buttonImage: \"jquery-ui/images/calendar.gif\",
|
|
buttonImageOnly: true,
|
|
buttonText: \"Select completed date\",
|
|
inline: true,
|
|
showButtonPanel: true,
|
|
changeMonth: true,
|
|
changeYear: true,
|
|
dateFormat: \"yy-mm-dd\"
|
|
});
|
|
|
|
$( \"#deferdatepicker\" ).datepicker({
|
|
showOn: \"button\",
|
|
buttonImage: \"jquery-ui/images/calendar.gif\",
|
|
buttonImageOnly: true,
|
|
buttonText: \"Select defer date\",
|
|
inline: true,
|
|
showButtonPanel: true,
|
|
changeMonth: true,
|
|
changeYear: true,
|
|
dateFormat: \"yy-mm-dd\"
|
|
});
|
|
|
|
var caldate = document.getElementById(\"caldate\");
|
|
var defdate = caldate.textContent;
|
|
$( \"#lognotescalendar\" ).datepicker({
|
|
inline: true,
|
|
altField: \"#targetdate\",
|
|
showButtonPanel: true,
|
|
changeMonth: true,
|
|
changeYear: true,
|
|
dateFormat: \"yy-mm-dd\",
|
|
onSelect: function(){
|
|
$(\"#calendar\").submit();
|
|
}
|
|
}).datepicker(\"setDate\", defdate);
|
|
|
|
function insertUrlAtCaret(outputAreaId, inputTextAreaId, inputUrlAreaId) {
|
|
var linktext=document.getElementById(inputTextAreaId).value;
|
|
var rawurltext=document.getElementById(inputUrlAreaId).value;
|
|
if (rawurltext=='') return;
|
|
var lastslashindex=rawurltext.lastIndexOf('/');
|
|
if (lastslashindex==rawurltext.length-1) {
|
|
rawurltext=rawurltext.slice(0, -1);
|
|
}
|
|
if (linktext=='' && rawurltext!= '') {
|
|
lastslashindex=rawurltext.lastIndexOf('/');
|
|
var lastpartofurl=rawurltext.substring(lastslashindex+1);
|
|
linktext=lastpartofurl;
|
|
}
|
|
var link='<a href=\"' + rawurltext.replace(/ /g,'\%20') + '\" target=\"_blank\">' + linktext + '</a>';
|
|
var txtarea = document.getElementById(outputAreaId);
|
|
var scrollPos = txtarea.scrollTop;
|
|
var caretPos = txtarea.selectionStart;
|
|
|
|
var front = (txtarea.value).substring(0, caretPos);
|
|
var back = (txtarea.value).substring(txtarea.selectionEnd, txtarea.value.length);
|
|
txtarea.value = front + link + back;
|
|
caretPos = caretPos + link.length;
|
|
txtarea.selectionStart = caretPos;
|
|
txtarea.selectionEnd = caretPos;
|
|
txtarea.focus();
|
|
txtarea.scrollTop = scrollPos;
|
|
}
|
|
|
|
</script>
|
|
</body>
|
|
</html>
|
|
";
|
|
} else {
|
|
echo "
|
|
<br>Invalid option \"$option\" passed to framework(). Valid options are \"begin\" and \"end\".<br>
|
|
";
|
|
exit(1);
|
|
}
|
|
}
|
|
|
|
function pagetable($option) {
|
|
if ($option=="begin") {
|
|
echo "
|
|
<br>
|
|
<table border=\"0\" width=\"100%\" cellpadding=\"10\">
|
|
<tr>
|
|
";
|
|
} else if ($option=="end") {
|
|
echo "
|
|
</tr></table>
|
|
";
|
|
} else {
|
|
echo "
|
|
<br>Invalid option \"$option\" passed to pagetable(). Valid options are \"begin\" and \"end\".<br>
|
|
";
|
|
exit(1);
|
|
}
|
|
}
|
|
|
|
function pageblock($block,$option) {
|
|
global $sbcolor;
|
|
if ($block=="left") {
|
|
if ($option=="begin") {
|
|
echo "
|
|
<td width=\"210\" bgcolor=\"$sbcolor\" valign=\"top\">
|
|
";
|
|
} else if ($option=="end") {
|
|
echo "
|
|
</td>
|
|
";
|
|
} else {
|
|
echo "
|
|
<br>Invalid option \"$option\" passed to pageblock(). Valid options are \"begin\" and \"end\".<br>
|
|
";
|
|
exit(1);
|
|
}
|
|
} else if ($block=="right") {
|
|
if ($option=="begin") {
|
|
echo "
|
|
<td valign=\"top\">
|
|
";
|
|
} else if ($option=="end") {
|
|
echo "
|
|
</td>
|
|
";
|
|
} else {
|
|
echo "
|
|
<br>Invalid option \"$option\" passed to pageblock(). Valid options are \"begin\" and \"end\".<br>
|
|
";
|
|
exit(1);
|
|
}
|
|
} else {
|
|
echo "
|
|
<br>Invalid block \"$block\" passed to pageblock(). Valid blocks are \"left\" and \"right\".<br>
|
|
";
|
|
exit(1);
|
|
}
|
|
}
|
|
|
|
function sidemenu($noprint=false) {
|
|
// Displays sidebar menu
|
|
global $db,$mbgcolor,$noprint;
|
|
$doparts=PARTS_FUNCTIONS;
|
|
$doschedmaint=SCHEDMAINT_FUNCTIONS;
|
|
echo "
|
|
<hr><br>
|
|
<table bgcolor=\"$mbgcolor\" border=\"1\" width=\"100%\">
|
|
<tr><td align=\"center\"><a href=\"lognotes.php\" title=\"Show today's notes\"><b>Logbook</b></a></td></tr>
|
|
<tr><td align=\"center\"><a href=\"logentry.php\" title=\"Add new log entry or manage templates\">Add Logbook Entry</a></td></tr>
|
|
<tr><td align=\"center\"><a href=\"search.php?target[]=log\">Search Logbook</a></td></tr>
|
|
</table>
|
|
<hr>
|
|
";
|
|
if ($doparts) {
|
|
echo "
|
|
<table bgcolor=\"$mbgcolor\" border=\"1\" width=\"100%\">
|
|
<tr><td align=\"center\"><a href=\"maintform.php\"><b>Maintenance Forms</b></a></td></tr>
|
|
<tr><td align=\"center\"><a href=\"maintformentry.php\">New Maintenance Form</a></td></tr>
|
|
<tr><td align=\"center\"><a href=\"search.php?target[]=maintform\">Search Maintenance Forms</a></td></tr>
|
|
</table>
|
|
<hr>
|
|
<table bgcolor=\"$mbgcolor\" border=\"1\" width=\"100%\">
|
|
<tr><td align=\"center\"><a href=\"parts.php\"><b>Parts</b></a></td></tr>
|
|
<tr><td align=\"center\"><a href=\"partentry.php\">Add New Part</a></td></tr>
|
|
<tr><td align=\"center\"><a href=\"search.php?target[]=part\">Search Parts</a></td></tr>
|
|
</table>
|
|
<hr>
|
|
";
|
|
}
|
|
if ($doschedmaint) {
|
|
echo "
|
|
<table bgcolor=\"$mbgcolor\" border=\"1\" width=\"100%\">
|
|
<tr><td align=\"center\"><a href=\"schedmaint.php\"><b>Scheduled Maintenance</b></a></td></tr>
|
|
</table>
|
|
<hr>
|
|
";
|
|
}
|
|
echo "
|
|
<table bgcolor=\"$mbgcolor\" border=\"1\" width=\"100%\">
|
|
<tr><td align=\"center\"><a href=\"admin.php\" title=\"Control global settings. Must be an administrator.\"><b>Administration</b></a></td></tr>
|
|
<tr><td align=\"center\"><a href=\"profile.php\">My Profile</a></td></tr>
|
|
<tr><td align=\"center\"><a href=\"templates.php\">Manage Templates</a></td></tr>
|
|
</table>
|
|
";
|
|
if (!isset($_SESSION['login'])) {
|
|
echo "
|
|
<hr>
|
|
<table bgcolor=\"$mbgcolor\" border=\"1\" width=\"100%\">
|
|
<tr><td align=\"center\"><a href=\"login.php\"><b>Log In</b></a></td></tr>
|
|
</table>
|
|
";
|
|
} else {
|
|
$loginid=$_SESSION['login'];
|
|
$loggedinas=mysqli_fetch_row(mysqli_query($db,"select techname from techs where techid=\"$loginid\""))[0];
|
|
echo "
|
|
<hr>
|
|
<table bgcolor=\"$mbgcolor\" border=\"1\" width=\"100%\">
|
|
<tr><td align=\"center\">Logged in as $loggedinas</td></tr><tr><td align=\"center\"><a href=\"login.php?cancel=1\"><b>Log Out</b></a></td></tr>
|
|
</table>
|
|
";
|
|
}
|
|
if (!$noprint) {
|
|
echo "
|
|
<hr>
|
|
<center>
|
|
<form method=\"post\" target=\"_blank\"><input type=\"submit\" name=\"print\" value=\"Printer Friendly\"></form>
|
|
</center>
|
|
<hr>
|
|
";
|
|
}
|
|
echo "
|
|
<br>
|
|
<table bgcolor=\"$mbgcolor\" border=\"1\" width=\"100%\">
|
|
<tr><td align=\"center\"><a href=\"about.php\">About</a></td></tr>
|
|
</table>
|
|
";
|
|
}
|
|
|
|
function banner($print) {
|
|
// displays a banner
|
|
global $db;
|
|
$bannerid=BANNER;
|
|
// get banner parameters from banner table
|
|
$banrow=mysqli_fetch_assoc(mysqli_query($db,"select * from banners where bannerid=\"$bannerid\""));
|
|
if (!$banrow) {
|
|
$bannerid=1;
|
|
} else {
|
|
$bannertext=$banrow["bannername"];
|
|
if ($print) {
|
|
$bannercolor="#FFFFFF";
|
|
$bannertxtcolor="#000000";
|
|
} else {
|
|
$bannercolor=$banrow["bannercolor"];
|
|
$bannertxtcolor=$banrow["textcolor"];
|
|
}
|
|
}
|
|
if ($bannerid != 1) {
|
|
echo "
|
|
<table width=\"100%\">
|
|
<tr bgcolor=\"$bannercolor\" align=\"center\"><td colspan=2><font size=\"+1\" color=\"$bannertxtcolor\"><b>$bannertext</b></font></td></tr></table>
|
|
";
|
|
}
|
|
}
|
|
|
|
function dblookup($dbhandle,$table,$in_field,$out_field,$in_data) {
|
|
// look up a single field in a database given a value for a single field
|
|
$dbqry=mysqli_query($dbhandle,"select $out_field from $table where $in_field=\"$in_data\"");
|
|
if (mysqli_num_rows($dbqry)) {
|
|
$out_data=mysqli_fetch_row($dbqry)[0];
|
|
} else {
|
|
$out_data=NULL;
|
|
}
|
|
return($out_data);
|
|
}
|
|
|
|
function calendar($year,$month,$day,$link_url) {
|
|
// takes a numeric year, month, day, and the basic url for the day links as arguments
|
|
// Shows a calendar with clickable dates.
|
|
// Based on an embeddable calendar by Yves Glodt.
|
|
// See http://www.mind.lu/~yg/stuff/
|
|
|
|
$YearToShow = $year;
|
|
$MonthToShow = $month;
|
|
$DayToShow = $day;
|
|
$NumberOfDays = date(t,mktime(0,0,0,$MonthToShow+1,0,$YearToShow,-1));
|
|
if ($month==1) {
|
|
$mbackyear=$year-1;
|
|
$mbackmonth=12;
|
|
} else {
|
|
$mbackyear=$year;
|
|
$mbackmonth=$month-1;
|
|
}
|
|
if ($month==12) {
|
|
$mfwdyear=$year+1;
|
|
$mfwdmonth=1;
|
|
} else {
|
|
$mfwdyear=$year;
|
|
$mfwdmonth=$month+1;
|
|
}
|
|
$ybackyear=$year-1;
|
|
$ybackmonth=$month;
|
|
$yfwdyear=$year+1;
|
|
$yfwdmonth=$month;
|
|
|
|
$MonthNames = array(1=>'January','February','March','April','May','June','July','August','September','October','November','December');
|
|
|
|
echo <<<EOT
|
|
<table border="1" cellpadding="1" cellspacing="0">
|
|
<tr>
|
|
<td colspan="7" align="center">
|
|
<a href="$link_url?y=$mbackyear&m=$mbackmonth&d=$day"><img src="icons/control-180.png" border="0" title="Prev month" alt="Prev month"></a>
|
|
<font size="+1">$MonthNames[$MonthToShow]</font>
|
|
<a href="$link_url?y=$mfwdyear&m=$mfwdmonth&d=$day"><img src="icons/control.png" border="0" title="Next month" alt="Next month"></a>
|
|
<br>
|
|
<a href="$link_url?y=$ybackyear&m=$ybackmonth&d=$day"><img src="icons/control-double-180.png" border="0" title="Prev year" alt="Prev year"></a>
|
|
<font size="+1">$YearToShow</font>
|
|
<a href="$link_url?y=$yfwdyear&m=$yfwdmonth&d=$day"><img src="icons/control-double.png"border="0" title="Next year" alt="Next year"></a>
|
|
</td>
|
|
</tr>
|
|
<tr align="center">
|
|
<th>Sun</th>
|
|
<th>Mon</th>
|
|
<th>Tue</th>
|
|
<th>Wed</th>
|
|
<th>Thu</th>
|
|
<th>Fri</th>
|
|
<th>Sat</th>
|
|
</tr>
|
|
|
|
EOT;
|
|
|
|
$FirstDayOfWeek = date(l,mktime(0,0,0,$MonthToShow,1,$YearToShow));
|
|
|
|
switch ($FirstDayOfWeek) {
|
|
case 'Monday':
|
|
$offset = 1;
|
|
break;
|
|
case 'Tuesday':
|
|
$offset = 2;
|
|
break;
|
|
case 'Wednesday':
|
|
$offset = 3;
|
|
break;
|
|
case 'Thursday':
|
|
$offset = 4;
|
|
break;
|
|
case 'Friday':
|
|
$offset = 5;
|
|
break;
|
|
case 'Saturday':
|
|
$offset = 6;
|
|
break;
|
|
default:
|
|
$offset = 0;
|
|
}
|
|
|
|
if ($offset > 0) {
|
|
print "<tr align=\"center\">\n";
|
|
echo str_repeat("<td class=\"n\"> </td>\n",$offset);
|
|
}
|
|
|
|
for ($i=1; $i <= $NumberOfDays; $i++) {
|
|
$DayOfWeek = date(l,mktime(0,0,0,$MonthToShow,$i,$YearToShow));
|
|
if($DayOfWeek == 'Sunday') {
|
|
print "<tr align=\"center\">\n";
|
|
}
|
|
if ($i != $DayToShow) {
|
|
print "<td><a href=\"$link_url?y=$YearToShow&m=$MonthToShow&d=$i\">$i</a></td>\n";
|
|
} else {
|
|
print "<td><a href=\"$link_url?y=$YearToShow&m=$MonthToShow&d=$i\"><b><font size=\"+1\" color=\"#FF0000\">$i</font></b></a></td>\n";
|
|
}
|
|
if($DayOfWeek == 'Saturday') {
|
|
print "</tr>\n";
|
|
}
|
|
}
|
|
|
|
if ( ( ($offset == 5) && ($NumberOfDays > 30) ) || ( ($offset == 6) && ($NumberOfDays > 29) ) ) {
|
|
if (42-$NumberOfDays-$offset > 0) {
|
|
echo str_repeat("<td class=\"n\"> </td>\n",42-$NumberOfDays-$offset);
|
|
}
|
|
print "</tr>\n";
|
|
} elseif ( ($NumberOfDays != 28) || ($offset > 0) ) {
|
|
if (35-$NumberOfDays-$offset > 0) {
|
|
echo str_repeat("<td class=\"n\"> </td>\n",35-$NumberOfDays-$offset);
|
|
print "</tr>\n";
|
|
}
|
|
}
|
|
|
|
print "</table>\n";
|
|
}
|
|
|
|
function colorpicker($baseurl) {
|
|
// takes a standard url and tacks the color number on to the end of it
|
|
// giving a palette of links
|
|
echo "
|
|
<map name=\"palette\">
|
|
<area shape=\"rect\" alt=\"#330033\" href=\"$baseurl 330033\" coords=\"171,109,186,121\">
|
|
<area shape=\"rect\" alt=\"#330099\" href=\"$baseurl 330099\" coords=\"153,109,168,121\">
|
|
<area shape=\"rect\" alt=\"#000066\" href=\"$baseurl 000066\" coords=\"135,109,150,121\">
|
|
<area shape=\"rect\" alt=\"#003333\" href=\"$baseurl 003333\" coords=\"117,109,132,121\">
|
|
<area shape=\"rect\" alt=\"#003300\" href=\"$baseurl 003300\" coords=\"99,109,114,121\">
|
|
<area shape=\"rect\" alt=\"#333300\" href=\"$baseurl 333300\" coords=\"81,109,96,121\">
|
|
<area shape=\"rect\" alt=\"#663333\" href=\"$baseurl 663333\" coords=\"63,109,78,121\">
|
|
<area shape=\"rect\" alt=\"#663300\" href=\"$baseurl 663300\" coords=\"45,109,60,121\">
|
|
<area shape=\"rect\" alt=\"#330000\" href=\"$baseurl 330000\" coords=\"27,109,43,121\">
|
|
<area shape=\"rect\" alt=\"#000000\" href=\"$baseurl 000000\" coords=\"9,109,24,121\">
|
|
<area shape=\"rect\" alt=\"#663366\" href=\"$baseurl 663366\" coords=\"171,93,186,105\">
|
|
<area shape=\"rect\" alt=\"#333399\" href=\"$baseurl 333399\" coords=\"153,93,168,105\">
|
|
<area shape=\"rect\" alt=\"#000099\" href=\"$baseurl 000099\" coords=\"135,93,150,105\">
|
|
<area shape=\"rect\" alt=\"#336666\" href=\"$baseurl 336666\" coords=\"117,93,132,105\">
|
|
<area shape=\"rect\" alt=\"#006600\" href=\"$baseurl 006600\" coords=\"99,93,114,105\">
|
|
<area shape=\"rect\" alt=\"#666600\" href=\"$baseurl 666600\" coords=\"81,93,96,105\">
|
|
<area shape=\"rect\" alt=\"#996633\" href=\"$baseurl 996633\" coords=\"63,93,78,105\">
|
|
<area shape=\"rect\" alt=\"#993300\" href=\"$baseurl 993300\" coords=\"45,93,60,105\">
|
|
<area shape=\"rect\" alt=\"#660000\" href=\"$baseurl 660000\" coords=\"27,93,42,105\">
|
|
<area shape=\"rect\" alt=\"#333333\" href=\"$baseurl 333333\" coords=\"9,93,24,105\">
|
|
<area shape=\"rect\" alt=\"#993399\" href=\"$baseurl 993399\" coords=\"171,77,186,89\">
|
|
<area shape=\"rect\" alt=\"#6600CC\" href=\"$baseurl 6600CC\" coords=\"153,77,168,89\">
|
|
<area shape=\"rect\" alt=\"#3333FF\" href=\"$baseurl 3333FF\" coords=\"135,77,150,89\">
|
|
<area shape=\"rect\" alt=\"#339999\" href=\"$baseurl 339999\" coords=\"117,77,132,89\">
|
|
<area shape=\"rect\" alt=\"#009900\" href=\"$baseurl 009900\" coords=\"99,77,114,89\">
|
|
<area shape=\"rect\" alt=\"#999900\" href=\"$baseurl 999900\" coords=\"81,77,96,89\">
|
|
<area shape=\"rect\" alt=\"#CC9933\" href=\"$baseurl CC9933\" coords=\"63,77,78,89\">
|
|
<area shape=\"rect\" alt=\"#CC6600\" href=\"$baseurl CC6600\" coords=\"45,77,60,89\">
|
|
<area shape=\"rect\" alt=\"#990000\" href=\"$baseurl 990000\" coords=\"27,77,42,89\">
|
|
<area shape=\"rect\" alt=\"#666666\" href=\"$baseurl 666666\" coords=\"9,77,24,89\">
|
|
<area shape=\"rect\" alt=\"#CC33CC\" href=\"$baseurl CC33CC\" coords=\"171,61,186,73\">
|
|
<area shape=\"rect\" alt=\"#6633FF\" href=\"$baseurl 6633FF\" coords=\"153,61,168,73\">
|
|
<area shape=\"rect\" alt=\"#3366FF\" href=\"$baseurl 3366FF\" coords=\"135,61,150,73\">
|
|
<area shape=\"rect\" alt=\"#00CCCC\" href=\"$baseurl 00CCCC\" coords=\"117,61,132,73\">
|
|
<area shape=\"rect\" alt=\"#33CC00\" href=\"$baseurl 33CC00\" coords=\"99,61,114,73\">
|
|
<area shape=\"rect\" alt=\"#FFCC00\" href=\"$baseurl FFCC00\" coords=\"81,61,96,73\">
|
|
<area shape=\"rect\" alt=\"#FFCC33\" href=\"$baseurl FFCC33\" coords=\"63,61,78,73\">
|
|
<area shape=\"rect\" alt=\"#FF6600\" href=\"$baseurl FF6600\" coords=\"45,61,60,73\">
|
|
<area shape=\"rect\" alt=\"#CC0000\" href=\"$baseurl CC0000\" coords=\"27,61,42,73\">
|
|
<area shape=\"rect\" alt=\"#999999\" href=\"$baseurl 999999\" coords=\"9,61,24,73\">
|
|
<area shape=\"rect\" alt=\"#CC66CC\" href=\"$baseurl CC66CC\" coords=\"171,45,186,57\">
|
|
<area shape=\"rect\" alt=\"#6666CC\" href=\"$baseurl 6666CC\" coords=\"153,45,168,57\">
|
|
<area shape=\"rect\" alt=\"#33CCFF\" href=\"$baseurl 33CCFF\" coords=\"135,45,150,57\">
|
|
<area shape=\"rect\" alt=\"#66CCCC\" href=\"$baseurl 66CCCC\" coords=\"117,45,132,57\">
|
|
<area shape=\"rect\" alt=\"#33FF33\" href=\"$baseurl 33FF33\" coords=\"99,45,114,57\">
|
|
<area shape=\"rect\" alt=\"#FFFF00\" href=\"$baseurl FFFF00\" coords=\"81,45,96,57\">
|
|
<area shape=\"rect\" alt=\"#FFCC66\" href=\"$baseurl FFCC66\" coords=\"63,45,78,57\">
|
|
<area shape=\"rect\" alt=\"#FF9900\" href=\"$baseurl FF9900\" coords=\"45,45,60,57\">
|
|
<area shape=\"rect\" alt=\"#FF0000\" href=\"$baseurl FF0000\" coords=\"27,45,42,57\">
|
|
<area shape=\"rect\" alt=\"#C0C0C0\" href=\"$baseurl C0C0C0\" coords=\"9,45,24,57\">
|
|
<area shape=\"rect\" alt=\"#FF99FF\" href=\"$baseurl FF99FF\" coords=\"171,29,186,41\">
|
|
<area shape=\"rect\" alt=\"#9999FF\" href=\"$baseurl 9999FF\" coords=\"153,29,168,41\">
|
|
<area shape=\"rect\" alt=\"#66FFFF\" href=\"$baseurl 66FFFF\" coords=\"135,29,150,41\">
|
|
<area shape=\"rect\" alt=\"#33FFFF\" href=\"$baseurl 33FFFF\" coords=\"117,29,132,41\">
|
|
<area shape=\"rect\" alt=\"#66FF99\" href=\"$baseurl 66FF99\" coords=\"99,29,114,41\">
|
|
<area shape=\"rect\" alt=\"#FFFF33\" href=\"$baseurl FFFF33\" coords=\"81,29,96,41\">
|
|
<area shape=\"rect\" alt=\"#FFFF66\" href=\"$baseurl FFFF66\" coords=\"63,29,78,41\">
|
|
<area shape=\"rect\" alt=\"#FF9966\" href=\"$baseurl FF9966\" coords=\"45,29,60,41\">
|
|
<area shape=\"rect\" alt=\"#FF6666\" href=\"$baseurl FF6666\" coords=\"27,29,42,41\">
|
|
<area shape=\"rect\" alt=\"#CCCCCC\" href=\"$baseurl CCCCCC\" coords=\"9,29,24,41\">
|
|
<area shape=\"rect\" alt=\"#FFCCFF\" href=\"$baseurl FFCCFF\" coords=\"171,13,186,25\">
|
|
<area shape=\"rect\" alt=\"#CCCCFF\" href=\"$baseurl CCCCFF\" coords=\"153,13,168,25\">
|
|
<area shape=\"rect\" alt=\"#CCFFFF\" href=\"$baseurl CCFFFF\" coords=\"135,13,150,25\">
|
|
<area shape=\"rect\" alt=\"#99FFFF\" href=\"$baseurl 99FFFF\" coords=\"117,13,132,25\">
|
|
<area shape=\"rect\" alt=\"#99FF99\" href=\"$baseurl 99FF99\" coords=\"99,13,114,25\">
|
|
<area shape=\"rect\" alt=\"#FFFFCC\" href=\"$baseurl FFFFCC\" coords=\"81,13,96,25\">
|
|
<area shape=\"rect\" alt=\"#FFFF99\" href=\"$baseurl FFFF99\" coords=\"63,13,78,25\">
|
|
<area shape=\"rect\" alt=\"#FFCC99\" href=\"$baseurl FFCC99\" coords=\"45,13,60,25\">
|
|
<area shape=\"rect\" alt=\"#FFCCCC\" href=\"$baseurl FFCCCC\" coords=\"27,13,42,25\">
|
|
<area shape=\"rect\" alt=\"#FFFFFF\" href=\"$baseurl FFFFFF\" coords=\"9,13,24,25\">
|
|
</map>
|
|
<img src=\"images/color-palette_1.png\" border=\"0\" usemap=\"#palette\">
|
|
";
|
|
}
|
|
|
|
// Project functions
|
|
|
|
|
|
function getsetting($setting_name,$tech_id) {
|
|
// get the value of a setting for a tech
|
|
global $db;
|
|
$confinfo=mysqli_fetch_assoc(mysqli_query($db,"select confid,confvalue from configs where confname=\"$setting_name\""));
|
|
$confid=$confinfo["confid"];
|
|
$confvalue=$confinfo["confvalue"];
|
|
$custqry=mysqli_query($db,"select customconfvalue from customs where customconfnum=\"$confid\" and customtech=\"$tech_id\"");
|
|
if (mysqli_num_rows($custqry)) {
|
|
$custvalue=mysqli_fetch_row($custqry)[0];
|
|
}
|
|
// if value in custom table, use it
|
|
if (mysqli_num_rows($custqry)) {
|
|
$retvalue=$custvalue;
|
|
$table="customs";
|
|
} else {
|
|
$retvalue=$confvalue;
|
|
$table="configs";
|
|
}
|
|
$result=array('value' => $retvalue,'table' => $table,'id' => $confid);
|
|
return $result;
|
|
}
|
|
|
|
function putsetting($setting_name,$setting_value,$tech_id) {
|
|
// set the value of a setting for a tech
|
|
global $db;
|
|
$confinfo=mysqli_fetch_assoc(mysqli_query($db,"select confid,confvalue from configs where confname=\"$setting_name\""));
|
|
$confid=$confinfo["confid"];
|
|
$confvalue=$confinfo["confvalue"];
|
|
$custqry=mysqli_query($db,"select customconfvalue from customs where customconfnum=\"$confid\" and customtech=\"$tech_id\"");
|
|
if (mysqli_num_rows($custqry)) {
|
|
if ($setting_value == $confvalue) {
|
|
mysqli_query($db,"delete from customs where customtech=\"$tech_id\" and customconfnum=\"$confid\"");
|
|
}
|
|
$custvalue=mysqli_fetch_row($custqry)[0];
|
|
if ($custvalue != $setting_value) {
|
|
mysqli_query($db,"update customs set customconfvalue=\"$setting_value\" where customconfnum=\"$confid\" and customtech=\"$tech_id\"");
|
|
}
|
|
} else {
|
|
mysqli_query($db,"insert into customs(customtech,customconfnum,customconfvalue) values(\"$tech_id\",\"$confid\",\"$setting_value\")");
|
|
}
|
|
}
|
|
|
|
function islink($il_note) {
|
|
// takes a noteid number as an argument
|
|
// determines if the argument is a link in a reference chain
|
|
// returns 1 if note is a link, 0 if not
|
|
global $db;
|
|
$refqry=mysqli_query($db,"select id from reflinks where noteid is not null and (noteid='$il_note' or target='$il_note')");
|
|
if (mysqli_num_rows($refqry)) {
|
|
return 1;
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
function generate_chain($chainlink) {
|
|
// generate a reference chain
|
|
// takes a single parameter, a noteid
|
|
// finds all notes that are members of a chain containing the supplied noteid
|
|
// returns a sorted array (chainarray) of all notes in chain
|
|
global $db;
|
|
// create notes and refs arrays from the reflinks table
|
|
$notes=[];
|
|
$targets=[];
|
|
$linkqry=mysqli_query($db,"select noteid,target from reflinks where noteid is not null");
|
|
while ($link=mysqli_fetch_assoc($linkqry)) {
|
|
$notes[]=$link['noteid'];
|
|
$targets[]=$link['target'];
|
|
}
|
|
|
|
$chainarray=array(); // create the chainarray
|
|
$chainarray[]=$chainlink; // add the incoming noteid for which the chain should be generated
|
|
$captr=0; // chainarray pointer
|
|
while($captr<count($chainarray)) { // as long as the chainarray is growing
|
|
$nptr=0; // note pointer
|
|
// run through the notes array, adding all targets for this note to the chainarray
|
|
while($nptr<count($notes)) {
|
|
if(($notes[$nptr]==$chainarray[$captr]) && ( ! in_array($targets[$nptr],$chainarray))) {
|
|
$chainarray[]=$targets[$nptr];
|
|
}
|
|
$nptr=$nptr+1;
|
|
}
|
|
// run through the targets array, adding all notes for this target to the chainarray
|
|
$tptr=0; //target pointer
|
|
while($tptr<count($targets)) {
|
|
if(($targets[$tptr]==$chainarray[$captr]) && ( ! in_array($notes[$tptr],$chainarray))) {
|
|
$chainarray[]=$notes[$tptr];
|
|
}
|
|
$tptr=$tptr+1;
|
|
}
|
|
$captr=$captr+1;
|
|
}
|
|
// sort and return the output array
|
|
sort($chainarray);
|
|
return($chainarray);
|
|
}
|
|
|
|
function convertweblinks($rawstring) {
|
|
// takes a string, finds urls, and returns the string with urls converted to clickable links
|
|
$urlchunksize=URL_CHUNK_SIZE;
|
|
// define regex pattern for urls
|
|
$urlpatt="/<weblink\b[^>]*>(.*?)<\/weblink>/";
|
|
preg_match_all($urlpatt,$rawstring,$weblinks, PREG_SET_ORDER);
|
|
foreach ($weblinks as $urlblock) {
|
|
// split up really long url
|
|
$spliturl=str_split($urlblock[1],$urlchunksize);
|
|
unset($urlstack);
|
|
foreach ($spliturl as $urlchunk) {
|
|
$urlstack[]="<a href=\"$urlblock[1]\" target=\"_blank\">$urlchunk</a>";
|
|
}
|
|
$hyperlink=implode("<br>",$urlstack);
|
|
$rawstring=str_replace($urlblock[0],$hyperlink,$rawstring);
|
|
}
|
|
return $rawstring;
|
|
}
|
|
|
|
function showlinklist($print) {
|
|
global $db;
|
|
$linkresult=mysqli_query($db,"select linkid from links where status=\"1\"");
|
|
if (mysqli_num_rows($linkresult) && !$print) {
|
|
echo "
|
|
<b>Links</b><br>
|
|
";
|
|
$link=mysqli_query($db,"select displaytxt,urltxt from links where status=\"1\" order by linkpriority asc");
|
|
while ($linkrow = mysqli_fetch_row($link)) {
|
|
printf("<a href=\"%s\">%s</a><br>",$linkrow[1],$linkrow[0]);
|
|
}
|
|
}
|
|
}
|
|
|
|
function nag($tech_id) {
|
|
// nags the user if something is pending
|
|
global $db, $today;
|
|
// maintenance forms
|
|
$mfpending=mysqli_num_rows(mysqli_query($db,"select maintformid from maintforms where mftech=\"$tech_id\" and pending=1"));
|
|
if ($mfpending) {
|
|
echo "<font color=\"#FF0000\">NOTICE</font>: You have one or more maintenance forms to complete. <a href=\"maintform.php\">Click here to complete them</a>.<br><hr>";
|
|
}
|
|
|
|
// scheduled maintenance events
|
|
$ucevents=get_upcoming_events();
|
|
$due=false;
|
|
$overdue=false;
|
|
foreach ($ucevents as $event) {
|
|
if ($event['duedate'] == $today) $due=true;
|
|
if ($event['duedate'] < $today) $overdue=true;
|
|
}
|
|
if ($due) {
|
|
echo "<font color=\"#FF0000\">NOTICE</font>: One or more scheduled maintenance events are due today. <a href=\"schedmaint.php\">Click here to view them</a>.<br><hr>";
|
|
}
|
|
if ($overdue) {
|
|
echo "<font color=\"#FF0000\" size=\"+1\">NOTICE</font>: One or more scheduled maintenance events are <font color=\"#FF0000\">OVERDUE</font>. <a href=\"schedmaint.php\">Click here to view them</a>.<br><hr>";
|
|
}
|
|
}
|
|
|
|
function get_part_data($partinputdata) {
|
|
// given an associative array of partid, uid, partnum, sernum,
|
|
// return an associative array of
|
|
// partid, uid, partnum, sernum, partname, result
|
|
// where result=0 for success, 1 for no data found, 2 for mismatch
|
|
global $db;
|
|
$checkmm = FALSE;
|
|
$result = 0;
|
|
// pull input data from input array
|
|
$partid = (array_key_exists('partid', $partinputdata) && $partinputdata['partid'] != "") ? $partinputdata['partid'] : NULL;
|
|
$uid = (array_key_exists('uid', $partinputdata) && $partinputdata['uid'] != "") ? $partinputdata['uid'] : NULL;
|
|
$partnum = (array_key_exists('partnum', $partinputdata) && $partinputdata['partnum'] != "") ? $partinputdata['partnum'] : NULL;
|
|
$sernum = (array_key_exists('sernum', $partinputdata) && $partinputdata['sernum'] != "") ? $partinputdata['sernum'] : NULL;
|
|
// for part data supplied, see what info is available
|
|
// if a partid is supplied, pull other info from parts
|
|
if ($partid) { // if partid supplied
|
|
$partqry = mysqli_query($db, "select * from parts where partid=\"$partid\"");
|
|
} else if ($uid && (!$partnum && !$sernum)) { // if uid only supplied
|
|
$partqry = mysqli_query($db, "select * from parts where uid like \"$uid\"");
|
|
} else if (($partnum && $sernum) && !$uid) { // if pn/sn only supplied
|
|
$partqry = mysqli_query($db, "select * from parts where partnum=\"$partnum\" and sernum=\"$sernum\"");
|
|
} else if ($uid && $partnum && $sernum) { //if uid and pn/sn supplied
|
|
$partqry = mysqli_query($db, "select * from parts where uid like \"$uid\" and partnum=\"$partnum\" and sernum=\"$sernum\"");
|
|
$checkmm = TRUE;
|
|
$mismatchqry = mysqli_query($db, "select * from parts where
|
|
(uid like \"$uid\" and ((partnum !=\"$partnum\" and partnum !=\"\")or (sernum !=\"$sernum\" and sernum !=\"\"))) or
|
|
((uid not like \"$uid\" and uid not like \"\") and (partnum =\"$partnum\" and sernum =\"$sernum\"))
|
|
");
|
|
} else if ($uid && $partnum && ! $sernum) { //if uid and pn only supplied
|
|
$partqry = mysqli_query($db, "select * from parts where uid like \"$uid\" and partnum=\"$partnum\"");
|
|
$checkmm = TRUE;
|
|
$mismatchqry = mysqli_query($db, "select partid from parts where
|
|
(uid like \"$uid\" and partnum !=\"$partnum\") or
|
|
(uid not like \"$uid\" and partnum =\"$partnum\")
|
|
");
|
|
} else if ($uid && ! $partnum && $sernum) { //if uid and sn only supplied
|
|
$partqry = mysqli_query($db, "select * from parts where uid like \"$uid\" and sernum=\"$sernum\"");
|
|
$checkmm = TRUE;
|
|
$mismatchqry = mysqli_query($db, "select partid from parts where
|
|
(uid like \"$uid\" and sernum !=\"$sernum\") or
|
|
(uid not like \"$uid\" and sernum =\"$sernum\")
|
|
");
|
|
} else {
|
|
// not enough input data supplied, so return result of 1
|
|
$result = 1;
|
|
}
|
|
if (! $result) {
|
|
if (mysqli_num_rows($partqry)) {
|
|
$partdata=mysqli_fetch_assoc($partqry);
|
|
} else {
|
|
$result=1;
|
|
}
|
|
}
|
|
|
|
// detect mismatched input data
|
|
if ($checkmm) {
|
|
if (mysqli_num_rows($mismatchqry)) {
|
|
$result=2;
|
|
}
|
|
}
|
|
|
|
if ($result) {
|
|
$partdata=array();
|
|
$partdata['result']=$result;
|
|
} else {
|
|
$partdata['result']=0;
|
|
}
|
|
return $partdata;
|
|
}
|
|
|
|
function get_upcoming_events() {
|
|
// build array of upcoming events
|
|
// takes no arguments
|
|
// returns an array containing arrays of upcoming event data
|
|
global $db, $today;
|
|
$uceventsqry=mysqli_query($db,"select * from events where active_flag=\"1\" and (deferred_flag=\"0\" or (deferred_flag=\"1\" and deferred_date <= \"$today\"))");
|
|
$ucevents=array();
|
|
while ($uceventrow=mysqli_fetch_assoc($uceventsqry)) {
|
|
// provide eventid,task,device,start_date,last_date,deferred_flag,deferred_date,active_flag
|
|
extract($uceventrow,EXTR_PREFIX_ALL,"eventdata");
|
|
|
|
// provide deviceid,devicename,devicedesc,group_flag,active_flag
|
|
$devicedata=mysqli_fetch_assoc(mysqli_query($db,"select * from devices where deviceid=\"$eventdata_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=\"$eventdata_task\""));
|
|
extract($taskdata,EXTR_PREFIX_ALL,"taskdata");
|
|
|
|
if ( ! ($taskdata_period == "once" && $eventdata_last_date >= $eventdata_start_date)) { // ignore completed one-time events
|
|
$start=date_create($eventdata_start_date); // create start date object
|
|
if ($eventdata_last_date=="0000-00-00") { // event has never been done. last date object will be start date object
|
|
$lastdatestrg="never";
|
|
$last=$start;
|
|
} else { // create last date object
|
|
$lastdatestrg="$eventdata_last_date";
|
|
$last=date_create($eventdata_last_date);
|
|
}
|
|
if ($taskdata_period=="once") { // nextdue object will be start date object
|
|
$nextdue=$start;
|
|
} else { // determine nextdue object from last date object (relative) or interval from start date object (absolute)
|
|
if ($lastdatestrg=="never") { // event has been scheduled to start today but has not been completed
|
|
$nextdue=$start;
|
|
} else if ($last==$start) { // event was completed for the first time on the start date
|
|
$nextdue=$start;
|
|
date_add($nextdue, date_interval_create_from_date_string("$taskdata_frequency $taskdata_period"));
|
|
} else {
|
|
if ($taskdata_nextdue_relative) { // calculate from day of last done date
|
|
$nextdue=$last;
|
|
date_add($nextdue, date_interval_create_from_date_string("$taskdata_frequency $taskdata_period"));
|
|
} else { // calculate from day of start date
|
|
$nextdue=$start;
|
|
$testdate=date_create("1970-01-01");
|
|
while ($testdate <= $last) {
|
|
date_add($nextdue, date_interval_create_from_date_string("$taskdata_frequency $taskdata_period"));
|
|
$testdate=$nextdue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if ($taskdata_weekdays_only) { // move forward off the weekend if required
|
|
$nextduedow=date("w",date_timestamp_get($nextdue));
|
|
if ($nextduedow==0) { // due on a Sunday
|
|
date_add($nextdue, date_interval_create_from_date_string("1 days"));
|
|
}
|
|
if ($nextduedow==6) { // due on a Saturday
|
|
date_add($nextdue, date_interval_create_from_date_string("2 days"));
|
|
}
|
|
}
|
|
$duedate=date_format($nextdue, 'Y-m-d');
|
|
$daysaway=date_diff(date_create($today),$nextdue)->format('%a');
|
|
$direction=date_diff(date_create($today),$nextdue)->format('%R');
|
|
if ($direction=="+") {
|
|
if ($daysaway == 0) {
|
|
$duedatestrg="<font color=\"#FF0000\"> $duedate </font>";
|
|
} else if ($daysaway < 4) {
|
|
$duedatestrg="<font color=\"#FFFF00\"> $duedate </font>";
|
|
} else {
|
|
$duedatestrg="<font color=\"#00FF00\"> $duedate </font>";
|
|
}
|
|
} else {
|
|
$duedatestrg="<font size=\"+1\" color=\"#FF0000\"><b> $duedate </b></font><img src=\"icons/exclamation-red.png\" border=\"0\">";
|
|
}
|
|
$uceventline=array(
|
|
'eventdata_eventid'=>$eventdata_eventid,
|
|
'duedate'=>$duedate,
|
|
'duedatestrg'=>$duedatestrg,
|
|
'devicedata_devicedesc'=>$devicedata_devicedesc,
|
|
'devicedata_devicename'=>$devicedata_devicename,
|
|
'taskdata_taskdesc'=>$taskdata_taskdesc,
|
|
'taskdata_taskname'=>$taskdata_taskname,
|
|
'lastdatestrg'=>$lastdatestrg
|
|
);
|
|
$ucevents[]=$uceventline;
|
|
}
|
|
}
|
|
return $ucevents;
|
|
}
|
|
|
|
function format_message($msgtype,$msgtxt) {
|
|
// displays a formatted message
|
|
// $msgtype is 0 for success or anything else for failure
|
|
// $msgtxt is the string to display
|
|
if ($msgtype == 0) {
|
|
$state="ui-state-highlight";
|
|
$icon="ui-icon-info";
|
|
} else {
|
|
$state="ui-state-error";
|
|
$icon="ui-icon-alert";
|
|
}
|
|
if ($msgtxt == "") $msgtxt="PROGRAM ERROR: No message text was supplied.";
|
|
echo "
|
|
<div class=\"$state ui-corner-all\" style=\"margin-top: 20px; padding: 0 .7em;\">
|
|
<p><span class=\"ui-icon $icon\" style=\"float: left; margin-right: .3em;\"></span>
|
|
$msgtxt</p>
|
|
</div><br><br>
|
|
";
|
|
}
|
|
|
|
function templateselect($techid,$operation) {
|
|
// Displays a line enabling selection of a user or global template
|
|
// $techid is the id number of the current tech
|
|
// $operation is one of "add" "edit" "delete"
|
|
global $db;
|
|
echo "
|
|
<form method=\"post\">
|
|
";
|
|
// generate template selection line
|
|
echo "
|
|
<table border=\"0\" cellpadding=\"10\"><tr>
|
|
";
|
|
// list user templates
|
|
echo "
|
|
<td>
|
|
<select name=\"usertemplateid\" title=\"Select the user template you'd like to load and click the Load Template button. User template selection takes precedence.\">
|
|
";
|
|
$templaterow=mysqli_query($db,"select * from notetemplates where tech=\"$techid\" order by templatename asc");
|
|
printf("<option value=\"%s\" selected>%s</option>","0","Select user template");
|
|
while ($templateitem=mysqli_fetch_assoc($templaterow)) {
|
|
printf("<option value=\"%s\">%s</option>",$templateitem["templateid"],$templateitem["templatename"]);
|
|
}
|
|
echo "
|
|
</select> or
|
|
";
|
|
// list global templates
|
|
echo "
|
|
<select name=\"globaltemplateid\" title=\"Select the global template you'd like to load and click the Load Template button. User template selection takes precedence.\">
|
|
";
|
|
$templaterow=mysqli_query($db,"select * from notetemplates where tech=\"0\" order by templatename asc");
|
|
printf("<option value=\"%s\" selected>%s</option>","0","Select global template");
|
|
while ($templateitem=mysqli_fetch_assoc($templaterow)) {
|
|
printf("<option value=\"%s\">%s</option>",$templateitem["templateid"],$templateitem["templatename"]);
|
|
}
|
|
echo "
|
|
</select>
|
|
";
|
|
// show load button
|
|
echo "
|
|
<input type=\"hidden\" name=\"operation\" value=\"$operation\">
|
|
<input type=\"submit\" name=\"loadtemplate\" value=\"Load Template\">
|
|
</td>
|
|
<td>
|
|
<a href=\"templates.php\">Manage templates</a>
|
|
</td>
|
|
</tr></table>
|
|
<hr>
|
|
</form>
|
|
";
|
|
}
|
|
?>
|