<?php // php pages made with phpMyBuilder <http://kyber.dk/phpMyBuilder> ?>
<?php
	// (C) Copyright 2001
	// Murray Jensen <Murray.Jensen@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>who</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($row['who']);
		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();
?>
