<?php // php pages made with phpMyBuilder <http://kyber.dk/phpMyBuilder> ?>
<?php
	// (C) Copyright 2001
	// Murray Jensen <Murray.Jensen@cmst.csiro.au>
	// CSIRO Manufacturing Science and Technology, Preston Lab

	// list page (hymod_bddb / boards)

	require("defs.php");

	pg_head("$bddb_label - Browse Board Log");

	if (!isset($serno) || $serno == 0)
		die("serial number not specified!");

	function print_cell($str) {
		if ($str == '')
			$str = '&nbsp;';
		echo "\t<td>$str</td>\n";
	}
?>
<table align=center border=1 cellpadding=10>
<tr>
<th>serno / edit</th>
<th>ethaddr</th>
<th>date</th>
<th>batch</th>
<th>type</th>
<th>rev</th>
<th>location</th>
</tr>
<?php
	$r=mysql_query("select * from boards where serno=$serno");

	while($row=mysql_fetch_array($r)){
		foreach ($columns as $key) {
			if (!key_in_array($key, $row))
				$row[$key] = '';
		}

		echo "<tr>\n";
		print_cell("<a href=\"edit.php?serno=$row[serno]\">$row[serno]</a>");
		print_cell($row['ethaddr']);
		print_cell($row['date']);
		print_cell($row['batch']);
		print_cell($row['type']);
		print_cell($row['rev']);
		print_cell($row['location']);
		echo "</tr>\n";
	}

	mysql_free_result($r);
?>
</table>
<hr></hr>
<p></p>
<?php
	$limit=abs(isset($limit)?$limit:20);
	$offset=abs(isset($offset)?$offset:0);
	$lr=mysql_query("select count(*) as n from log where serno=$serno");
	$lrow=mysql_fetch_array($lr);
	if($lrow['n']>$limit){
		$preoffset=max(0,$offset-$limit);
		$postoffset=$offset+$limit;
		echo "<table width=\"100%\">\n<tr align=center>\n";
		printf("<td><%sa href=\"%s?serno=$serno&offset=%d\"><img border=0 alt=\"&lt;\" src=\"/icons/left.gif\"></a></td>\n", $offset>0?"":"no", $PHP_SELF, $preoffset);
		printf("<td><%sa href=\"%s?serno=$serno&offset=%d\"><img border=0 alt=\"&gt;\" src=\"/icons/right.gif\"></a></td>\n", $postoffset<$lrow['n']?"":"no", $PHP_SELF, $postoffset);
		echo "</tr>\n</table>\n";
	}
	mysql_free_result($lr);
?>
<table width="100%" border=1 cellpadding=10>
<tr valign=top>
<th>logno / edit</th>
<th>date</th>
<th width="70%">details</th>
</tr>
<?php
	$r=mysql_query("select * from log where serno=$serno order by logno limit $offset,$limit");

	while($row=mysql_fetch_array($r)){
		echo "<tr>\n";
		print_cell("<a href=\"edlog.php?serno=$row[serno]&logno=$row[logno]\">$row[logno]</a>");
		print_cell($row['date']);
		print_cell("<pre>" . urldecode($row['details']) . "</pre>");
		echo "</tr>\n";
	}

	mysql_free_result($r);
?>
</table>
<hr></hr>
<p></p>
<table width="100%">
<tr>
  <td align=center>
    <a href="newlog.php?serno=<?php echo "$serno"; ?>">Add to Log</a>
  </td>
  <td align=center>
    <a href="index.php">Back to Start</a>
  </td>
</tr>
</table>
<?php
	pg_foot();
?>
