Index: /trunk/DNSDB.pm
===================================================================
--- /trunk/DNSDB.pm	(revision 15)
+++ /trunk/DNSDB.pm	(revision 16)
@@ -24,5 +24,5 @@
 @EXPORT_OK	= qw(
 	&initGlobals &connectDB &finish &addDomain &delDomain &domainName &grpName &getSOA &getRecLine
-	&getDomRecs &addRec &delRec &domStatus
+	&getDomRecs &addRec &updateRec &delRec &domStatus
 	%typemap %reverse_typemap
 	);
@@ -31,5 +31,5 @@
 %EXPORT_TAGS	= ( ALL => [qw(
 		&initGlobals &connectDB &finish &addDomain &delDomain &domainName &grpName &getSOA &getRecLine
-		&getDomRecs &addRec &delRec &domStatus
+		&getDomRecs &addRec &updateRec &delRec &domStatus
 		%typemap %reverse_typemap
 		)]
@@ -453,4 +453,47 @@
 
 
+## DNSDB::updateRec()
+# Update a record
+sub updateRec {
+  $errstr = '';
+  my $dbh = shift;
+  my $defrec = shift;
+  my $id = shift;
+
+# all records have these
+  my $host = shift;
+  my $type = shift;
+  my $val = shift;
+  my $ttl = shift;
+
+  return('FAIL',"Missing standard argument(s)") if !defined($ttl);
+
+# only MX and SRV will use these
+  my $dist = 0;
+  my $weight = 0;
+  my $port = 0;
+
+  if ($type == $reverse_typemap{MX} || $type == $reverse_typemap{SRV}) {
+    $dist = shift
+	or return ('FAIL',"MX or SRV requires distance");
+    if ($type == $reverse_typemap{SRV}) {
+      my $weight = shift
+	or return ('FAIL',"SRV requires weight");
+      my $port = shift
+	or return ('FAIL',"SRV requires port");
+    }
+  }
+
+  my $sth = $dbh->prepare("UPDATE ".($defrec eq 'y' ? 'default_' : '')."records ".
+	"SET host=?,type=?,val=?,ttl=?,distance=?,weight=?,port=? ".
+	"WHERE record_id=?");
+  $sth->execute($host,$type,$val,$ttl,$dist,$weight,$port,$id);
+
+  return ('FAIL',$sth->errstr) if $sth->err;
+
+  return ('OK','OK');
+} # end updateRec()
+
+
 ## DNSDB::delRec()
 # Delete a record.  
Index: /trunk/dns.cgi
===================================================================
--- /trunk/dns.cgi	(revision 15)
+++ /trunk/dns.cgi	(revision 16)
@@ -177,8 +177,11 @@
 
 } elsif ($webvar{page} eq 'record') {
+
   if ($webvar{recact} eq 'new') {
+
     $page->param(todo => "Add record to");
     $page->param(recact => "add");
-    stdrecs();
+    fill_rectypes();
+
   } elsif ($webvar{recact} eq 'add') {
 
@@ -191,29 +194,20 @@
       }
     }
-  # wtf?
-  #  push @recargs, 
     my ($code,$msg) = addRec(@recargs);
 
     if ($code eq 'OK') {
       changepage(page => "reclist", id => $webvar{parentid}, defrec => $webvar{defrec});
-#      showdomain($webvar{defrec},$webvar{parentid});
-  # NB: should **really** redirect here, in case of reload.  >_<  eyowch.
     } else {
-      $page->param(add_failed => 1);
+      $page->param(failed => 1);
       $page->param(errmsg => $msg);
-      stdrecs($webvar{type});	# populate the form... er, mostly.
-      $page->param(name => $webvar{name});
-      $page->param(address => $webvar{address});
-      $page->param(distance => $webvar{distance})
-	if ($webvar{type} == $reverse_typemap{MX} or $webvar{type} == $reverse_typemap{SRV});
-      $page->param(weight => $webvar{weight}) if $webvar{type} == $reverse_typemap{SRV};
-      $page->param(port => $webvar{port}) if $webvar{type} == $reverse_typemap{SRV};
-    }
-
-    $page->param(defrec => $webvar{defrec});
+      fill_recdata();	# populate the form... er, mostly.
+    }
 
   } elsif ($webvar{recact} eq 'edit') {
 
-    $page->param(todo => "Edit record in");
+    $page->param(todo		=> "Update record");
+    $page->param(recact		=> "update");
+    $page->param(parentid	=> $webvar{parentid});
+    $page->param(defrec		=> $webvar{defrec});
     my $sth = $dbh->prepare("SELECT host,type,val,distance,weight,port,ttl FROM ".
 	($webvar{defrec} eq 'y' ? 'default_' : '')."records WHERE record_id=?");
@@ -226,10 +220,38 @@
     $page->param(port		=> $port);
     $page->param(ttl		=> $ttl);
-    stdrecs($type);
-  }
+    fill_rectypes($type);
+
+  } elsif ($webvar{recact} eq 'update') {
+
+    my ($code,$msg) = updateRec($dbh,$webvar{defrec},$webvar{id},
+	$webvar{name},$webvar{type},$webvar{address},$webvar{ttl},
+	$webvar{distance},$webvar{weight},$webvar{port});
+
+    if ($code eq 'OK') {
+      $page->param(failed	=> 1);
+      $page->param(errmsg	=> "testing");
+      $page->param(wastrying	=> "updating");
+      $page->param(todo		=> "Update record");
+      $page->param(recact	=> "update");
+      $page->param(parentid	=> $webvar{parentid});
+      $page->param(defrec	=> $webvar{defrec});
+      fill_recdata();
+#      changepage(page => "reclist", id => $webvar{parentid}, defrec => $webvar{defrec});
+    } else {
+      $page->param(failed	=> 1);
+      $page->param(errmsg	=> $msg);
+      $page->param(wastrying	=> "updating");
+      $page->param(todo		=> "Update record");
+      $page->param(recact	=> "update");
+      $page->param(parentid	=> $webvar{parentid});
+      $page->param(defrec	=> $webvar{defrec});
+      fill_recdata();
+    }
+  }
+
   if ($webvar{defrec} eq 'y') {
-    $page->param(domain => "group ".grpName($dbh,$webvar{parentid}));
-  } else {
-    $page->param(domain => domainName($dbh,$webvar{parentid}));
+    $page->param(dohere => "group ".grpName($dbh,$webvar{parentid}));
+  } else {
+    $page->param(dohere => domainName($dbh,$webvar{parentid}));
   }
 
@@ -464,11 +486,11 @@
 }
 
-sub stdrecs {
+# fill in record type list on add/update/edit record template
+sub fill_rectypes {
   my $type = shift || $reverse_typemap{A};
 
   my $sth = $dbh->prepare("select val,name from rectypes where stdflag=1 order by listorder");
   $sth->execute;
-
-push @debugbits, "DEBUG: type $type\n";
+push @debugbits, "type $type";
   my @typelist;
   while (my ($rval,$rname) = $sth->fetchrow_array()) {
@@ -478,14 +500,16 @@
   }
   $page->param(typelist	=> \@typelist);
-  $page->param(domain	=> domainName($dbh,$webvar{domainid}));
-  $page->param(defrec	=> $webvar{defrec});
+}
+
+sub fill_recdata {
+  fill_rectypes($webvar{type});
+
+  $page->param(name	=> $webvar{name});
+  $page->param(address	=> $webvar{address});
+  $page->param(distance	=> $webvar{distance})
+	if ($webvar{type} == $reverse_typemap{MX} or $webvar{type} == $reverse_typemap{SRV});
+  $page->param(weight	=> $webvar{weight}) if $webvar{type} == $reverse_typemap{SRV};
+  $page->param(port	=> $webvar{port}) if $webvar{type} == $reverse_typemap{SRV};
   $page->param(ttl	=> ($webvar{ttl} ? $webvar{ttl} : $DNSDB::def{minttl}));
-  if ($webvar{defrec} eq 'y') {
-    ##fixme - should be groupid
-    $page->param(parentid => 1);
-  } else {
-print "DEBUG: foobar:  parentid $webvar{parentid}<br>\n";
-    $page->param(parentid => $webvar{parentid});
-  }
 }
 
Index: /trunk/templates/record.tmpl
===================================================================
--- /trunk/templates/record.tmpl	(revision 15)
+++ /trunk/templates/record.tmpl	(revision 16)
@@ -5,5 +5,5 @@
 <td align="center">
 
-<TMPL_IF edit_failed><span class="errmsg">Error <TMPL VAR NAME=recact> record: <TMPL_VARNAME=errmsg></span></TMPL_IF>
+<TMPL_IF failed><div class="errmsg">Error <TMPL_VAR NAME=wastrying> record: <TMPL_VARNAME=errmsg></div></TMPL_IF>
 <form action="dns.cgi" method="POST">
 <input type="hidden" name="page" value="record">
@@ -17,5 +17,5 @@
 
 	<table border=0 width="100%">
-	<tr class="tableheader"><td align="center" colspan=2><TMPL_VAR NAME=todo> <TMPL_VAR NAME=domain></td></tr>
+	<tr class="tableheader"><td align="center" colspan=2><TMPL_VAR NAME=todo>: <TMPL_VAR NAME=dohere></td></tr>
 	<tr class="datalinelight">
 		<td>Hostname</td>
@@ -51,5 +51,5 @@
 	</tr>
 	<tr class="datalinelight">
-		<td colspan=2 align=center><input type="submit" value=" Add record "></td>
+		<td colspan=2 align=center><input type="submit" value=" <TMPL_VAR NAME=todo> "></td>
 	</tr>
 	</table>
