<?php
// IPplan v4.92a
// Aug 24, 2001
//
// Modified by Tony D. Koehn February 2003
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
require_once("../ipplanlib.php");
require_once("../adodb/adodb.inc.php");
require_once("../class.dbflib.php");
require_once("../layout/class.layout");
require_once("../auth.php");
require_once("../class.xptlib.php");
define("FQDNHNAMEREGEX", '/^(([\w][\w\-\.]*)\.)?([\w][\w\-]+)(\.([\w][\w\.]*))?\.?$/');
$auth = new SQLAuthenticator(REALM, REALMERROR);
// And now perform the authentication
$grps=$auth->authenticate();
// set language
isset($_COOKIE["ipplanLanguage"]) && myLanguage($_COOKIE['ipplanLanguage']);
//setdefault("window",array("bgcolor"=>"white"));
//setdefault("table",array("cellpadding"=>"0"));
//setdefault("text",array("size"=>"2"));
$title=my_("Zone Domain DNS Records");
newhtml($p);
$w=myheading($p, $title, true);
// explicitly cast variables as security measure against SQL injection
list($action, $domain, $cust, $host, $recordtype, $iphostname, $sortorder, $descrip, $expr, $block, $ipplanParanoid) = myRegister("S:action S:domain I:cust S:host S:recordtype S:iphostname S:sortorder S:descrip S:expr I:block I:ipplanParanoid");
// save the last customer used
// must set path else Netscape gets confused!
setcookie("ipplanCustomer","$cust",time() + 10000000, "/");
$formerror="";
if ($action=="delete") {
if (is_array($dataid)) {
foreach($dataid as $key => $value) {
$dataid[$key]=floor($value);
}
}
else {
$dataid=array(0=>$dataid);
}
// user hit submit without selecting anything!
if (empty($dataid[0])) {
$action="";
}
}
else {
$dataid=isset($dataid) ? floor($dataid) : 0;
}
// basic sequence is connect, search, interpret search
// result, close connection
$ds=new IPplanDbf() or myError($w,$p, my_("Could not connect to database"));
// CHECK Actions First
// ##################### Start OF DELETE ##############################
if ($action=="delete") {
if (!$dom_id=$ds->ds->GetOne("SELECT data_id
FROM fwdzone
WHERE customer=$cust AND domain=".$ds->ds->qstr($domain))) {
myError($w,$p, my_("Could not find the zone - possibly deleted by another user"));
}
// check if user belongs to customer admin group
$result=$ds->GetCustomerGrp($cust);
// can only be one row - does not matter if nothing is
// found as array search will return false
$row = $result->FetchRow();
if (!in_array($row["admingrp"], $grps)) {
myError($w,$p, my_("You may not delete dns records as you are not a member of the customers admin group"));
}
// Log the Transaction.
$ds->DbfTransactionStart();
foreach ($dataid as $value) {
// missing records will just get ignored
if ($row=$ds->ds->GetRow("SELECT recidx, error_message, ip_hostname, host
FROM fwdzonerec
WHERE customer=$cust AND recidx=".$value )) {
// update IP record if deleting auto A record
if ($row["error_message"]=="A") {
// found a subnet? Maybe it has been deleted!
if ($result=$ds->GetBaseFromIp(inet_aton($row["ip_hostname"]), $cust)) {
$row1 = $result->FetchRow();
$baseindex=$row1["baseindex"];
$ds->ds->Execute("UPDATE ipaddr
SET hname=".$ds->ds->qstr($row["host"])."
WHERE baseindex=$baseindex AND ipaddr=".inet_aton($row["ip_hostname"]));
insert($w,textbr(sprintf(my_("IP record %s updated in subnet '%s' due to deletion of auto created A record"), $row["ip_hostname"], $row1["descrip"])));
}
}
$result = &$ds->ds->Execute("DELETE FROM fwdzonerec
WHERE customer=$cust AND recidx=$value") and
$ds->ds->Execute("UPDATE fwdzone
SET error_message=".$ds->ds->qstr("E").",
lastmod=".$ds->ds->DBTimeStamp(time()).
" WHERE customer=$cust AND data_id=".$dom_id) and
$ds->AuditLog(array("event"=>120, "action"=>"delete zone record", "cust"=>$cust,
"user"=>getAuthUsername(), "id"=>$value));
}
}
$ds->DbfTransactionEnd();
if ($result) {
$ds->DbfTransactionEnd();
insert($w,textbr(my_("Domain DNS Record Deleted.")));
$zone="";
} else {
$ds->DbfTransactionRollback();
$formerror .= my_("DNS Record could not be deleted.")."\n";
}
}
// ##################### END OF DELETE ##############################
// ##################### START OF RENUMBER ##############################
else if ($action=="renumber") {
// check if user belongs to customer admin group
$result=$ds->GetCustomerGrp($cust);
// can only be one row - does not matter if nothing is
// found as array search will return false
$row = $result->FetchRow();
if (!in_array($row["admingrp"], $grps)) {
myError($w,$p, my_("You may not delete dns records as you are not a member of the customers admin group"));
}
// could do this in one hit, but requires funky update syntax only available in mysql 4.x
// need to be able to use ORDER BY in update
//
// set @t1=0;
// update fwdzonerec set sortorder=@t1:=@t1+5 where customer=1 and data_id=73 order by sortorder;
// Log the Transaction.
$ds->DbfTransactionStart();
$result = &$ds->ds->Execute("SELECT fwdzonerec.recidx, fwdzonerec.sortorder
FROM fwdzone, fwdzonerec
WHERE fwdzone.customer=$cust AND
fwdzone.domain=".$ds->ds->qstr($domain)." AND
fwdzone.data_id=fwdzonerec.data_id
ORDER by fwdzonerec.sortorder");
// ok, now get all records and renumber
if ($result) {
$i=5;
while($row = $result->FetchRow()) {
$recidx=$row["recidx"];
$result1 = &$ds->ds->Execute("UPDATE fwdzonerec
SET sortorder=$i
WHERE recidx=$recidx");
$i=$i+5;
}
$ds->AuditLog(array("event"=>123, "action"=>"renumber zone record", "cust"=>$cust,
"user"=>getAuthUsername(), "domain"=>$domain));
$ds->DbfTransactionEnd();
insert($w,textbr(my_("Domain Records Renumbered.")));
}
else {
$ds->DbfTransactionRollback();
$formerror .= my_("DNS Records could not be renumbered.")."\n";
}
}
// ##################### END OF RENUMBER ##############################
// ##################### Start OF Add ##############################
if ($action=="add" or $action=="edit") {
$updateiprec=0;
// check if user belongs to customer admin group
$result=$ds->GetCustomerGrp($cust);
// can only be one row - does not matter if nothing is
// found as array search will return false
$row = $result->FetchRow();
if (!in_array($row["admingrp"], $grps)) {
myError($w,$p, my_("You may not add a record as you are not a member of the customers admin group"));
}
// convert shortcuts to FQDN
if ($host === "@") {
$formerror .= my_("Bind @ shortcut converted to Fully Qualified Domain Name (FQDN)")."\n";
$host=$domain.".";
}
/*
if ($host === "*") {
$formerror .= my_("Bind * shortcut converted to Fully Qualified Domain
Name (FQDN)")."\n";
$host="*.".$domain.".";
} */
// Error Checks
if (strpos($host, "_") or strpos($iphostname, "_")) {
myError($w,$p, my_("Invalid IP/ Hostname"));
}
if ($recordtype=="MX") { // MX could have no hostname
if ($host and !preg_match(FQDNHNAMEREGEX, $host)) {
myError($w,$p, my_("Invalid hostname"));
}
} else {
if (!$host)
myError($w,$p, my_("Host may not be blank"));
if (!preg_match(FQDNHNAMEREGEX, $host))
myError($w,$p, my_("Invalid hostname"));
}
if (!$recordtype)
myError($w,$p, my_("Record Type may not be blank."));
if (!$sortorder or $sortorder < 1)
$sortorder=9999;
if (!$iphostname)
myError($w,$p, my_("IP / Hostname may not be blank."));
if ($recordtype=="MX" or $recordtype=="AFSDB") {
// format should be "preference hostname" added AFSDB by Jp 060711
list($preference, $iphost) = explode(" ", $iphostname, 2);
// is it correct format?
if (is_numeric($preference) and $preference >= 0) {
if (!preg_match(FQDNHNAMEREGEX, $iphost)) {
myError($w,$p, my_("Invalid IP/ Hostname"));
}
}
// no just a hostname? then add a default preference of 10.
else {
if (!preg_match(FQDNHNAMEREGEX, $iphostname)) {
myError($w,$p, my_("Invalid IP/ Hostname"));
}
$iphostname="10 ".$iphostname;
}
} else if ($recordtype=="TXT") {
// this can be any text string.
} else if ($recordtype=="KEY") {
// this can be any text string.
} else if ($recordtype=="SRV") {
// 060711 Jp format should be "priority weight port target_host"
list($priority, $weight, $port, $iphost) = explode(" ", $iphostname, 4);
// is it correct format?
if (is_numeric($priority) and is_numeric($weight) and is_numeric($port)
and $priority >= 0 and $weight >= 0 and $port >= 0 ) {
if (!preg_match(FQDNHNAMEREGEX, $iphost)) {
myError($w,$p, my_("Invalid IP/ Hostname"));
}
}
// no just an invalid SRV record ?
else {
myError($w,$p, my_("Invalid SRV type record. Usage: SRV <priority> <weight> <port> <target_host>"));
}
} else {
if (!preg_match('/^(([\w][\w\-\.]*)\.)?([\w][\w\-]+)(\.([\w][\w\.]*))?\.?$/', $iphostname)) {
myError($w,$p, my_("Invalid IP/ Hostname"));
}
}
// add . after record - don't understand thinking here? User should determine if
// qualified or not?
/*
if(preg_match("/[a-z]/i",$iphostname) && substr($iphostname,-1) != '.') {
$iphostname .= '.';
}
*/
// iphostname must be IP address
if ($recordtype=="A" and testIP($iphostname))
myError($w,$p, my_("For A type, IP / Hostname must be an IP address"));
// need to check for valid host
if ($recordtype=="CNAME" or $recordtype=="NS") {
if (!preg_match(FQDNHNAMEREGEX, $iphostname))
myError($w,$p, my_("Invalid IP/ Hostname"));
}
// everything looks ok, now check that there are no duplicates
// could use database key for this, but would require huge indexes
// cannot check much else as records could be outside of this zone
// bind has no issues with CNAME's or MX records pointing to non-existent
// records, so don't bother checking those either
$result = &$ds->ds->Execute("SELECT customer
FROM fwdzonerec
WHERE customer=$cust AND data_id=$zoneid AND
host=".$ds->ds->qstr($host)." AND
recordtype=".$ds->ds->qstr($recordtype)." AND
ip_hostname=".$ds->ds->qstr($iphostname));
$recs=$result->PO_RecordCount("fwdzonerec", "customer=$cust AND data_id=$zoneid AND
host=".$ds->ds->qstr($host)." AND
recordtype=".$ds->ds->qstr($recordtype)." AND
ip_hostname=".$ds->ds->qstr($iphostname));
if($recs > 0) {
myError($w,$p, my_("Cannot create duplicate records"));
}
// check if there is only one A record for this customer across all its domains
// then update ipaddr record
if ($recordtype=="A") {
// cannot do a simple three way join on ipaddr, base and fwdzonerec as the
// field types are different
$result = &$ds->ds->Execute("SELECT ip_hostname
FROM fwdzonerec
WHERE customer=$cust AND
recordtype=".$ds->ds->qstr("A")." AND
ip_hostname=".$ds->ds->qstr($iphostname));
$recs=$result->PO_RecordCount("fwdzonerec", "customer=$cust AND
recordtype=".$ds->ds->qstr("A")." AND
ip_hostname=".$ds->ds->qstr($iphostname));
if($recs == 1) {
$updateiprec=1;
}
}
}
// ##################### START OF Add ##############################
if ($action=="add") {
if (!$dom_id=$ds->ds->GetOne("SELECT data_id
FROM fwdzone
WHERE customer=$cust AND data_id=$zoneid")) {
myError($w,$p, my_("Could not find the zone - possibly deleted by another user"));
}
// Add to DB here.
// Log the Transaction.
$ds->DbfTransactionStart();
// do update of ip record with hostname as part of transaction
if ($updateiprec) {
$fqdn=substr($host, -1, 1) == "." ? substr($host, 0, -1) : "$host.$domain";
$result=$ds->GetBaseFromIP(inet_aton($iphostname), $cust);
if ($row=$result->FetchRow()) {
$baseindex=$row["baseindex"];
$ds->ModifyIP(array(inet_aton($iphostname)), $baseindex, "", "", "", "", "", $fqdn, "");
// not really an error, but a warning?
$formerror .= my_("Subnet IP record updated with hostname: ")."$fqdn\n";
}
}
$result = &$ds->ds->Execute("INSERT into fwdzonerec
(customer, data_id, sortorder, lastmod, host,
recordtype, userid, ip_hostname) ".
"VALUES ($cust, $zoneid, ". $sortorder.",".
$ds->ds->DBTimeStamp(time()).",".
$ds->ds->qstr($host).",".
$ds->ds->qstr($recordtype).",".
$ds->ds->qstr(getAuthUsername()).",".
$ds->ds->qstr($iphostname).")" ) and
$ds->ds->Execute("UPDATE fwdzone
SET error_message=".$ds->ds->qstr("E").",
lastmod=".$ds->ds->DBTimeStamp(time()).
" WHERE customer=$cust AND data_id=".$dom_id) and
$ds->AuditLog(array("event"=>121, "action"=>"add zone record", "cust"=>$cust,
"user"=>getAuthUsername(), "domain"=>$domain, "host"=>$host,
"recordtype"=>$recordtype, "iphostname"=>$iphostname));
if ($result) {
$ds->DbfTransactionEnd();
insert($w,textbr(my_("Host record added.")));
$zone="";
} else {
$ds->DbfTransactionRollback();
$formerror .= my_("Host record could not be added.")."\n";
}
}
// ##################### END OF Add ##############################
// ##################### Start OF Edit ##############################
if ($action=="edit") {
if (!$ds->ds->GetOne("SELECT recidx FROM fwdzonerec WHERE customer=$cust AND recidx=".$dataid )) {
myError($w,$p, my_("Could not find the record - possibly deleted by another user"));
}
$dom_id=$ds->ds->GetOne("SELECT data_id
FROM fwdzone
WHERE customer=$cust AND domain=".$ds->ds->qstr($domain));
// Updated DB here.
// Log the Transaction.
$ds->DbfTransactionStart();
// do update of ip record with hostname as part of transaction
if ($updateiprec) {
$fqdn=substr($host, -1, 1) == "." ? substr($host,0, -1) : "$host.$domain";
$result=$ds->GetBaseFromIP(inet_aton($iphostname), $cust);
if ($row=$result->FetchRow()) {
$baseindex=$row["baseindex"];
$ds->ModifyIP(array(inet_aton($iphostname)), $baseindex, "", "", "", "", "", $fqdn, "");
// not really an error, but a warning?
$formerror .= my_("Subnet IP record updated with hostname: ")."$fqdn\n";
}
}
$result = &$ds->ds->Execute("UPDATE fwdzonerec SET sortorder=".$sortorder.
", host=".$ds->ds->qstr($host).
", lastmod=".$ds->ds->DBTimeStamp(time()).
", recordtype=".$ds->ds->qstr($recordtype).
", userid=".$ds->ds->qstr(getAuthUsername()).
", ip_hostname=".$ds->ds->qstr($iphostname).
" WHERE customer=$cust AND recidx=".$dataid ) and
$ds->ds->Execute("UPDATE fwdzone
SET error_message=".$ds->ds->qstr("E").",
lastmod=".$ds->ds->DBTimeStamp(time()).
" WHERE customer=$cust AND data_id=".$dom_id) and
$ds->AuditLog(array("event"=>122, "action"=>"modified zone record", "cust"=>$cust,
"user"=>getAuthUsername(), "domain"=>$domain, "host"=>$host,
"recordtype"=>$recordtype, "iphostname"=>$iphostname));
if ($result) {
$ds->DbfTransactionEnd();
insert($w,textbr(my_("Host Record Modified")));
$zone="";
}
else {
$ds->DbfTransactionRollback();
$formerror .= my_("Host record could not be modifed. Try again.")."\n";
}
}
// ##################### END OF Edit ##############################
myError($w,$p, $formerror, FALSE);
insert($w,heading(3, "$title."));
insert($w,textbr(my_("Maintain forward zone domain records.")));
// start form
insert($w, $f1 = form(array("name"=>"THISFORM",
"method"=>"post",
"action"=>$_SERVER["PHP_SELF"])));
// ugly kludge with global variable!
$displayall=FALSE;
$cust=myCustomerDropDown($ds, $f1, $cust, $grps) or myError($w,$p, my_("No customers"));
//
// Get a List of Domains from the fwdzone table.
//
$result = &$ds->ds->Execute("SELECT domain, data_id FROM fwdzone
WHERE customer=$cust AND
slaveonly=".$ds->ds->qstr("N")."
ORDER BY domain");
if (!$result) {
myError($w,$p, my_("No domains found. Create some domains and try again."));
}
insert($w, $f2 = form(array("name"=>"DomainSelect",
"method"=>"post",
"action"=>"modifydnsrecord.php?cust=".$cust)));
insert($f2,textbrbr(my_("Domain")));
insert($f2,span(my_("Master domains only"), array("class"=>"textSmall")));
insert($f2,block("<SELECT NAME='domain' ONCHANGE='submit()'>"."\n"));
$cnt=0;
while($row = $result->FetchRow()) {
$data=$row["domain"];
$cnt++;
// set domain to first record if domain has not been selected prviously
if ($cnt==1 and empty($domain)) {
$domain=$data;
}
// save data_id for later for the "Add" button
if ($data==$domain) {
$zoneid=$row["data_id"];
insert($f2,block("<OPTION VALUE= '".$data."' SELECTED>".$data."\n"));
}
else {
insert($f2,block("<OPTION VALUE= '".$data."'>".$data."\n"));
}
}
insert($f2,block("</SELECT>\n"));
insert($f2,generic("br"));
//insert($f2,submit(array("value"=>my_("Select Domain"))));
// Now Setup Page...
// get info from base table
if ($domain) {
$result = &$ds->ds->Execute("SELECT data_id FROM fwdzone
WHERE customer=$cust AND domain='$domain'");
$row = $result->FetchRow();
$zoneid=$row["data_id"];
// what is the additional search SQL?
$search=$ds->mySearchSql("host", $expr, $descrip);
$sqllastmod = $ds->ds->SQLDate("M d Y H:i:s", 'lastmod');
$result = &$ds->ds->Execute("SELECT recidx, data_id, host, recordtype, ip_hostname,
error_message, sortorder, customer, $sqllastmod AS lastmod, userid
FROM fwdzonerec
WHERE customer=$cust AND data_id=$zoneid
$search
ORDER by sortorder");
$arr=$_GET;
$arr["domain"]=$domain;
$arr["cust"]=$cust;
$arr["action"]="";
$srch = new mySearch($w, $arr, $descrip, "descrip");
$srch->legend=my_("Refine Search on Host");
$srch->expr=$expr;
$srch->expr_disp=TRUE;
$srch->Search(); // draw the sucker!
}
$totcnt=0;
$vars="";
// fastforward till first record if not first block of data
while ($block and $totcnt < $block*MAXTABLESIZE and
$row = $result->FetchRow()) {
$vars=DisplayBlock($w, $row, $totcnt, "&domain=".urlencode($domain)."&cust=".$cust.
"&expr=$expr&descrip=".urlencode($descrip), "sortorder");
$totcnt++;
}
insert($w,block("<p>"));
insert($w,textb($domain));
insert($w, $f = form(array("name"=>"deleterecords",
"method"=>"post",
"action"=>$_SERVER["PHP_SELF"])));
// create a table
insert($f,$t = table(array("cols"=>"7",
"class"=>"outputtable")));
// draw heading
setdefault("cell",array("class"=>"heading"));
insert($t,$c = cell());
if (!empty($vars))
insert($c,anchor($vars, "<<"));
insert($c,text(my_("Sort-Order")));
insert($t,$c = cell());
insert($c,text(my_("Host")));
insert($t,$c = cell());
insert($c,text(my_("Record Type")));
insert($t,$c = cell());
insert($c,text(my_("IP/Hostname")));
insert($t,$c = cell());
insert($c,text(my_("Last modified")));
insert($t,$c = cell());
insert($c,text(my_("Changed by")));
insert($t,$ck = cell());
insert($ck,text(my_("Action")));
//capture data for the export view functionality
$export = new exportForm();
$export->addRow(array("sort_order", "host", "record_type", "ip_hostname", "last_modified", "changed_by"));
$export->saveRow();
$cnt=0;
while($row = $result->FetchRow()) {
setdefault("cell",array("class"=>color_flip_flop()));
$export->addRow(NULL);
$temphost=$row["host"];
$tempiphostname=$row["ip_hostname"];
/*
if ($row["recordtype"]=="MX") {
$tempiphostname=$temphost . " " . $tempiphostname;
$temphost="";
}
if ($row["recordtype"]=="@") {
$temphost="";
}
*/
insert($t,$c = cell());
insert($c,text($row["sortorder"]));
$export->addCell($row["sortorder"]);
insert($t,$c = cell());
insert($c,text($temphost));
$export->addCell($temphost);
insert($t,$c = cell());
insert($c,text($row["recordtype"]));
$export->addCell($row["recordtype"]);
// auto created record?
if ($row["error_message"]=="A") {
insert($c,block(" <small><i>"));
insert($c,textbr(my_("Auto record")));
insert($c,block("</small></i>"));
}
insert($t,$c = cell());
insert($c,text($tempiphostname));
$export->addCell($tempiphostname);
insert($t,$c = cell());
insert($c,block("<small>"));
insert($c,block($result->UserTimeStamp($row["lastmod"], "M d Y H:i:s")));
insert($c,block("</small>"));
$export->addCell($row["lastmod"]);
insert($t,$c = cell());
insert($c,text($row["userid"]));
$export->addCell($row["userid"]);
$export->saveRow();
insert($t,$c = cell());
insert($c,block("<small>"));
insert($c,checkbox(array("name"=>"dataid[]",
"value"=>$row["recidx"]), ""));
insert($c,anchor($_SERVER["PHP_SELF"]."?cust=$cust&dataid=".$row["recidx"]."&action=delete&domain=".urlencode($domain), my_("Delete Record"),
$ipplanParanoid ? array("onclick"=>"return confirm('".my_("Are you sure?")."')") : FALSE));
insert($c,block(" | "));
insert($c,anchor("modifydnsrecordform.php?cust=$cust&dataid=".$row["recidx"].
"&action=edit".
"&domain=".urlencode($domain).
"&sortorder=".$row["sortorder"].
"&host=".urlencode($row["host"]).
"&recordtype=".$row["recordtype"].
"&iphostname=".urlencode($row["ip_hostname"]), my_("Edit Record")));
insert($c,block("</small>"));
if ($totcnt % MAXTABLESIZE == MAXTABLESIZE-1)
break;
$cnt++;
$totcnt++;
}
insert($w,block("<p>"));
if ($cnt) {
// save customer name for actual post of data
insert($f,hidden(array("name"=>"cust",
"value"=>"$cust")));
insert($f,hidden(array("name"=>"domain",
"value"=>"$domain")));
insert($f,hidden(array("name"=>"action",
"value"=>"delete")));
// code to select all buttons on form named swiptosend
// checkbox array variable is named baseindex[]
insert($f,block('
<script language="JavaScript" type="text/javascript">
<!--
function checkAll(val) {
al=document.deleterecords;
len = al.elements.length;
var i=0;
for( i=0 ; i<len ; i++) {
if (al.elements[i].name==\'dataid[]\') {
al.elements[i].checked=val;
}
}
}
//-->
</script>
'));
insert($f,anchor("javascript:checkAll(1)", my_("Check all")));
insert($f,block(" | "));
insert($f,anchor("javascript:checkAll(0)", my_("Clear all")));
insert($f,block("<p>"));
insert($f,submit(array("value"=>my_("Delete multiple"))));
}
$vars="";
$printed=0;
while ($row = $result->FetchRow()) {
$totcnt++;
$vars=DisplayBlock($w, $row, $totcnt, "&domain=".urlencode($domain)."&cust=".$cust.
"&expr=$expr&descrip=".urlencode($descrip), "sortorder" );
if (!empty($vars) and !$printed) {
insert($ck,anchor($vars, ">>"));
$printed=1;
}
}
if ($domain) {
insert($w, $f = form(array("method"=>"post", "action"=>"modifydnsrecordform.php?cust=$cust&action=add&domain=".urlencode($domain)."&zoneid=".$zoneid)));
insert($f,submit(array("value"=>my_("Add a Host"))));
}
if (!$cnt) {
myError($w,$p, my_("No Records found. Please choose a domain and try again."));
}
// if there are some records, give option to renumber
else {
insert($f,anchor($_SERVER["PHP_SELF"]."?cust=$cust&action=renumber&domain=".urlencode($domain)."&block=$block", my_("Renumber SortOrder"),
$ipplanParanoid ? array("onclick"=>"return confirm('".my_("Are you sure?")."')") : FALSE));
}
$result->Close();
// create the export view form
$expression = $export->translateExpr($expr);
$export->setInfo(array(array("customer_ID", "customer_description", "search_criterion", "search_expression"),
array($cust, $ds->getCustomerDescrip($cust), $expression, $descrip)));
$export->createExportForm($w, NULL);
printhtml($p);
?>