[feladat @ 76]
Changed some of the functions that are used for the listing of (all)
zones. Instead of getting all zones from the database, it now only
requests exactlty what it needs. Considerable perfomance improvement.
<?session_start();/************* * Constants * *************/define(ROWAMOUNT,50);if(isset($_GET["start"])){define(ROWSTART,(($_GET["start"]-1)*ROWAMOUNT));}else{define(ROWSTART,0);}if(isset($_GET["letter"])){define(LETTERSTART,$_GET["letter"]);$_SESSION["letter"]=$_GET["letter"];}elseif(isset($_SESSION["letter"])){define(LETTERSTART,$_SESSION["letter"]);}else{define(LETTERSTART,"a");}if(!@include_once("config.inc.php")){error(_('You have to create a config.inc.php!'));}if(is_file(dirname(__FILE__).'/../install.php')){error(_('You have to remove install.php before this program will run'));}if(is_file(dirname(__FILE__).'/../migrator.php')){error(_('You have to remove migrator.php before this program will run'));}/* Database connection */require_once("database.inc.php");// Generates $db variable to access database.// Array of the available zone types$server_types=array("MASTER","SLAVE","NATIVE");/************* * Includes * *************/require_once("error.inc.php");require_once("auth.inc.php");require_once("i18n.inc.php");require_once("users.inc.php");require_once("dns.inc.php");require_once("record.inc.php");/************* * Functions * *************//* * Display the page option: [1] [2] .. [n] */functionshow_pages($amount,$rowamount,$id=''){if($amount>$rowamount){if(!isset($_GET["start"]))$_GET["start"]=1;echo_('Show page')."<br>";for($i=1;$i<=ceil($amount/$rowamount);$i++){if($_GET["start"]==$i){echo"[ <b>".$i."</b> ] ";}else{echo"[ <a href=\"".$_SERVER["PHP_SELF"]."?start=".$i;if($id!='')echo"&id=".$id;echo"\">".$i."</a> ] ";}}}}/* * Display the alphabetic option: [0-9] [a] [b] .. [z] */functionshow_letters($letterstart,$userid=true){echo_('Show zones beginning with:')."<br>";$letter="[[:digit:]]";if($letterstart=="0"){echo"[ <span class=\"lettertaken\">0-9</span> ] ";}elseif(zone_letter_start($letter,$userid)){echo"[ <a href=\"".$_SERVER["PHP_SELF"]."?letter=0\">0-9</a> ] ";}else{echo"[ <span class=\"letternotavailble\">0-9</span> ] ";}foreach(range('a','z')as$letter){if($letter==$letterstart){echo"[ <span class=\"lettertaken\">".$letter."</span> ] ";}elseif(zone_letter_start($letter,$userid)){echo"[ <a href=\"".$_SERVER["PHP_SELF"]."?letter=".$letter."\">".$letter."</a> ] ";}else{echo"[ <span class=\"letternotavailble\">".$letter."</span> ] ";}}}functionzone_letter_start($letter,$userid=true){global$db;$sqlq="SELECT domains.id AS domain_id, zones.owner, records.id, domains.name AS domainname FROM domains LEFT JOIN zones ON domains.id=zones.domain_id LEFT JOIN records ON records.domain_id=domains.id WHERE 1";if((!level(5)||!$userid)&&!level(10)&&!level(5)){$sqlq.=" AND zones.owner=".$_SESSION["userid"];}$sqlq.=" AND substring(domains.name,1,1) REGEXP '^".$letter."' LIMIT 1";$result=$db->query($sqlq);$numrows=$result->numRows();if($numrows=="1"){return1;}else{return0;}}/* * Print a nice useraimed error. */functionerror($msg){// General function for printing critical errors.if($msg){include_once("header.inc.php");?> <p><?echo_('Oops! An error occured!');?></p> <p><?echonl2br($msg)?></p><?include_once("footer.inc.php");die();}else{include_once("footer.inc.php");die("No error specified!");}}/* * Something has been done nicely, display a message and a back button. */functionmessage($msg){include_once("header.inc.php");?> <P><TABLE CLASS="messagetable"><TR><TD CLASS="message"><H2><?echo_('Success!');?></H2> <BR> <FONT STYLE="font-weight: Bold"> <P><?if($msg){echonl2br($msg);}else{echo_('Successful!');}?> </P> <BR> <P> <a href="javascript:history.go(-1)"><< <?echo_('back');?></a></FONT> </P> </TD></TR></TABLE></P><?include_once("footer.inc.php");}/* * Reroute a user to a cleanpage of (if passed) arg */functionclean_page($arg=''){if(!$arg){header("Location: ".$_SERVER["PHP_SELF"]."?time=".time());exit;}else{if(preg_match('!\?!si',$arg)){$add="&time=";}else{$add="?time=";}header("Location: $arg$add".time());exit;}}functionlevel($l){if($_SESSION["level"]>=$l){return1;}else{return0;}}functionxs($zoneid){global$db;if(is_numeric($zoneid)&&is_numeric($_SESSION["level"])){$result=$db->query("SELECT id FROM zones WHERE owner=".$_SESSION["userid"]." AND domain_id=$zoneid");$result_extra=$db->query("SELECT record_owners.id FROM record_owners,records WHERE record_owners.user_id=".$_SESSION["userid"]." AND records.domain_id = $zoneid AND records.id = record_owners.record_id LIMIT 1");if($result->numRows()==1||$_SESSION["level"]>=5){$_SESSION[$zoneid."_ispartial"]=0;returntrue;}elseif($result_extra->numRows()==1){$_SESSION[$zoneid."_ispartial"]=1;returntrue;}else{returnfalse;}}else{returnfalse;}}functionget_status($res){if($res=='0'){return"<FONT CLASS=\"inactive\">"._('Inactive')."</FONT>";}elseif($res=='1'){return"<FONT CLASS=\"active\">"._('Active')."</FONT>";}}functionparse_template_value($val,$domain,$webip,$mailip){$val=str_replace('##DOMAIN##',$domain,$val);$val=str_replace('##WEBIP##',$webip,$val);$val=str_replace('##MAILIP##',$mailip,$val);return$val;}/* * Validates an email address. * Checks if there is something before the at '@' sign and its followed by a domain and a tld of minimum 2 * and maximum of 4 characters. */functionis_valid_email($email){if(!eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.([a-z]{2,6}$)",$email)){returnfalse;}returntrue;}?>