<?php
//dv at josheli.com
//add on email function for Sam's Vox info script

// homepage www.samscripts.com/scripts/voxinfo

class voxinfo{

    function 
voxinfo$servers = array(),$serverurl "http://voxtremestatus.com/index.php?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) == || preg_match("/(".join("|"$this->serverswanted).")/is"$v["attributes"]["server"]) )
                        
$this->announcements[$v["attributes"]["date"]] = $v["attributes"]["text"];
                    break;
                case 
"server":
                    if( 
count($this->serverswanted) == || 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){
        if(
count($this->announcements)==0) {
            echo 
str_replace(array("{date} :""{announcement}"), array('No announcements'''), $template);
        }
        else {
        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);
        }
    }

////////////////////////////////////////////////////////////////////////////
//  Function to send email if a service is listed as 'off' 
//  in the Vox XML output; call this function after parsing the doc
//
//  $emailTo: the recipient email or comma-seperated emails
//  $emailFrom: the sender's email
//  $thisServer: name of the server this script is on. if it's on a Vox server
//    this value should be one of the Vox server names, i.e. Moray, Octopus, etc.
//    if this script is not on a Vox server, it can be anything or empty

    
function sendemail($emailTo=''$emailFrom=''$thisServer='') {
        
        
//can't do anything without a recipient email
        
if(empty($emailTo)) return;

    
//fake the sender's email
        
if(empty($emailFrom)) $emailFrom $_SERVER['SERVER_ADMIN'];

    
//got some server info, see if any service is 'off'
        
if($this->numservers 0) {
            
$dontSend false;
            foreach( 
$this->servers as $server => $services){
                foreach(
$services as $service => $value){
                    if(
$value == 'off') {
                        
//oops, it's SMTP on this server...can't send an email...
                        
if( strtolower($server) == strtolower($thisServer) && $service == 'SMTP' && $value == 'off' ) {
                            
$dontSend true;
                        }
                        
$message .= $service.': '.$value.'<br>';
                    }
                    
                }
                if(isset(
$message)) {
          
$message .= "<br>";
          
$affectedServers[] = $server;
        }
            }
        }

        
//build and send
        
if(isset($message) && !$dontSend) {

            
$subject 'Voxinfo Report: '.implode(', ',$affectedServers);
                               
            
$message 'Timestamp: '.date("F j, Y, g:i a").'<br>Status: <br>'.$message;

            
$headers "From: <$emailFrom>\r\n";
            
$headers .= "X-Sender: <$emailFrom>\r\n";
            
$headers .= "X-Mailer: PHP\r\n"
            
$headers .= "X-Priority: 3\r\n"//1 UrgentMessage, 3 Normal
            
$headers .= "Return-Path: <$emailFrom>\r\n";
            
$headers .= "Content-Type: text/html; charset=iso-8859-1\r\n";
            
            
mail($emailTo$subject$message$headers);
      
        }
        return;
    }


}


?>