<?php
// homepage www.samscripts.com/scripts/voxinfo
class voxinfo{
    function voxinfo( $servers = array(),$serverurl = "http://info.voxtreme.com/index.xml"){
        $this->serverswanted = $servers;
        $this->url = $serverurl;
    }
    function doit($template){
        if( $this->getinfo() ){
            $this->displayresults($template);
            return true;
        }else{
            return false;
        }
    }
    function getinfo(){
        $url = $this->url;
        $iwant = "";
        $xml = @file($url);
        if( $xml ){
            $xml = join("", $xml);
            $this->parse($xml);
            return true;
        }else{
            return false;
        }
    }
    function parse(&$xml){
        $parser = xml_parser_create();
        xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
        xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1);
        xml_parse_into_struct($parser,$xml,$values,$tags);
        xml_parser_free($parser);
        $this->announcements = array();
        $this->servers = array();
        foreach($values as $v){
            switch( $v["tag"]){
                case "announcement":
                    if( count($this->serverswanted) == 0 || preg_match("/(".join("|", $this->serverswanted).")/is", $v["attributes"]["text"]) )
                        $this->announcements[$v["attributes"]["date"]] = $v["attributes"]["text"];
                    break;
                case "server":
                    if( count($this->serverswanted) == 0 || preg_match("/(".join("|", $this->serverswanted).")/is", $v["attributes"]["name"]) )
                        $this->servers[$v["attributes"]["name"]] = $v["attributes"];
                    break;
            }
        }
        $this->numservers = count($this->servers);
        $this->numannouncements = count($this->announcements);
    }
    function displayresults($template){
        if( preg_match("/<announcements>(.*?)<\/announcements>/is", $template, $matches) ){
            $tpla = $matches[1];
        }else{
            $tpla = "";
        }
        if( preg_match("/<servers>(.*?)<\/servers>/is", $template, $matches) ){
            $tpls = $matches[1];
        }else{
            $tpls = "";
        }
        ob_start();
        $this->displayannouncements($tpla);
        $a = ob_get_contents();
        ob_end_clean();
        ob_start();
        $this->displayservers($tpls);
        $s = ob_get_contents();
        ob_end_clean();
        echo preg_replace(array("/<announcements>.*?<\/announcements>/is", "/<servers>.*?<\/servers>/is"),
                    array($a, $s), $template);
    }
    function displayannouncements($template){
        foreach($this->announcements as $date => $text){
            echo str_replace(array("{date}", "{announcement}"), array($date, $text), $template);
        }
    }
    function displayservers($template){
        $search = array("{name}", "{uptime}", "{ftp}", "{http}", "{ip}", "{smtp}", "{pop3}", "{MySql}");
        foreach( $this->servers as $name=>$values){
            echo str_replace($search, array($values["name"], $values["uptime"], $values["ftp"], $values["http"], $values["ip"],
                    $values["smtp"], $values["pop3"], $values["MySql"]), $template);
        }
    }
}
// uncomment for example
/*
$tpl = '
<table>
<tr><td colspan="7" align="center"><b>Announcements</b></td></tr>
<announcements><tr><td colspan="7">{date} : <i>{announcement}</i></td></tr></announcements>
<tr><td colspan="7"><br><br></td></tr>
<tr><td><b><u>Server</u></b></td>
<td><b><u>ftp</u></b></td>
<td><b><u>http</u></b></td>
<td><b><u>smtp</u></b></td>
<td><b><u>pop3</u></b></td>
<td><b><u>mysql</u></b></td>
<td><b><u>uptime</u></b></td></tr>
<servers>
<tr>
<td><b>{name}</b><br><i><ip></i></td>
<td>{ftp}</td>
<td>{http}</td>
<td>{smtp}</td>
<td>{pop3}</td>
<td>{MySql}</td>
<td>{uptime}</td>
</tr>
</servers>
</table>
';
// $vi = new voxinfo(array("swordfish", "kraken")); // just get info for swordfish and kraken
// $vi = new voxinfo(array("barracuda")); // just for barracuda ... etc
$vi = new voxinfo();
if( !$vi->doit($tpl) ) echo "S**t, an error occurred!";
*/
?>