<?
 
/**
 
    Author: Mario Herrmann <mario at maxx-web dot com>
 
    
 
 
 
    # English
 
        
 
        This is a simple class to paint some statistics  
 
        just by using simple HTML code
 
        U don´t need any gdlib extensions to be installed
 
        
 
        Maybe the Stylesheet definitions may not fit ur needs
 
        so just change it in the Construktor or just delete the constructor function
 
        and make the settings for "td.dia_normal","td.dia_small" and "td.dia_very_small"
 
        global
 
        
 
        Some pictures are needed to paint the Chart axis
 
        ecke.gif,right_dia.gif,right_spitze.gif,up_dia.gif,up_spitze.gif
 
        and pixel.gif
 
        
 
        if u don´t want to keep them in the same directory as the script u can use
 
        $object->set_imagefolder("ur/image/folder/");
 
        
 
        Usage:        
 
        $chart =new THtml_Chart();
 
        $values=array(    "Peter"=>array(10),"Ulf"=>array(10.7),"Jan"=>array(17),"Stefan"=>array(9),"Mario"=>array(40));
 
        $chart->show_diagramm($values,"Name","Easter Eggs","Simple Easter Egg Chart",array("Number of founded eggs"));
 
        
 
        for more examples view the example.php
 
        
 
    # Deutsch
 
        
 
        Einfache Klasse zur Darstellung von Daten (Statistiken)
 
        ohne auf Erweiterungen wie die gdlib zurückgreifen zu müssen
 
        
 
        Falls die Stylesheetangaben die Im Construktor der Klasse 
 
        ausgegeben werden nicht zum Benutzten Layout passen
 
        so können diese leicht geändert werden
 
        
 
        Die Bilder ecke.gif,right_dia.gif,right_spitze.gif,up_dia.gif,up_spitze.gif und    pixel.gif
 
        werden benötigt um die Achsen des Diagramms zu zeichnen
 
        sollen die Bilder nicht im gleichen Pfad wie das Script liegen
 
        kann mit $object->set_imagefolder("dein/bilder/ordner/"); ein eigener Ordner
 
        angegeben werden
 
        
 
        Beispiele sind in der example.php
 
*/
 
 
class THtml_Chart{
 
    
 
    var $bar_colors=array("#FF8000","#004080","#FF0000","#008040","#808080");    
 
    var $bgcolor="#FFFFFF";
 
    var $headcolor="#CCCCCC";
 
    var $bordercolor="#000000";
 
    var $maxstring="maximal value";
 
    var $show_x_values=false;
 
    var $measure="";
 
    var $imagefolder="";
 
    var $show_avg=false;
 
    var $show_cap_avg=false;
 
    
 
    function THtml_Chart(){        
 
        echo <<<css
 
        <style type="text/css">
 
        <!--
 
        table       { font-family: Verdana, Arial,Helvetica;font-size: 10pt; } 
        td.dia_normal          { font-family: Verdana, Arial,Helvetica;font-size: 10pt; } 
        td.dia_small      { font-size: 8pt;color: #000000; }    
 
        td.dia_very_small      { font-size: 7pt;color: #000000; }        
 
        -->
 
        </style>
 
 
css;
 
        
 
    }
 
    
 
    function _reset(){
 
        $this->bar_colors=array("#FF8000","#004080","#FF0000","#008040","#808080");    
 
        $this->bgcolor="#FFFFFF";
 
        $this->headcolor="#CCCCCC";
 
        $this->bordercolor="#000000";
 
        $this->maxstring="maximal value";
 
        $this->show_x_values=false;
 
        $this->measure="";
 
        $this->imagefolder="";
 
        $this->show_avg=false;
 
    }
 
    function set_imagefolder($f){
 
        $this->imagefolder=$f;    
 
    }
 
    function set_measure($unit){
 
        $this->measure=$unit;    
 
    }
 
    function set_maxstring($v){
 
        $this->maxstring=$v;    
 
    }
 
    function htmlcolor($color){
 
        return eregi("^#[0-9A-Fa-f]{6}$",$color);
 
    }
 
    
 
    function set_bgcolor($c){
 
        if($this->htmlcolor($c))$this->bgcolor=$c;
 
    }
 
    function set_bordercolor($c){
 
        if($this->htmlcolor($c))$this->bordercolor=$c;
 
    }
 
    function set_headcolor($c){
 
        if($this->htmlcolor($c))$this->headcolor=$c;
 
    }
 
    function set_bar_colors($c){
 
        if(is_array($c)){
 
            foreach($c as $v){                
 
                if(!$this->htmlcolor($v))return false;
 
            }    
 
            $this->bar_colors=$c;
 
        }        
 
    }
 
    function set_show_x_values($c=false){
 
        if(($c))
 
            $this->show_x_values=true;
 
        else
 
            $this->show_x_values=false;
 
    }
 
    function set_show_avg($a=false){
 
        if(($a))
 
            $this->show_avg=true;
 
        else
 
            $this->show_avg=false;
 
    }
 
    function set_show_cap_avg($a=false){
 
        if(($a))
 
            $this->show_cap_avg=true;
 
        else
 
            $this->show_cap_avg=false;
 
    }
 
    
 
    function show_diagramm($werte,$yachse,$xachse,$tablehead,$legende){        
 
        
 
        $max=0;$anzahl=0;$i=0;$a=0;    
 
        
 
        
 
        if(is_array($werte)){    
 
            
 
            foreach($werte as $bezeichner => $values){                
 
                if($this->show_avg){
 
                    $avg[]= round(array_sum($values)/count($values),2);    
 
                }                
 
                foreach($values as $x){                    
 
                    if($x>$max)$max=$x;
 
                    if($this->show_cap_avg){        
 
                        $cap_avg[$i]+=$x;
 
                        $i++;                                                    
 
                    }
 
                }                
 
                $anzahl++;
 
            }
 
            
 
            
 
            if ($max!=0){
 
                ?>
 
                <table border="0" cellpadding="0" cellspacing="0" width="100%">
 
                <tr bgcolor="<?=$this->bordercolor?>"><td class="dia_normal">
 
                    <table border="0" cellpadding="5" cellspacing="1" width="100%">
 
                    <tr bgcolor="<?=$this->headcolor?>"><td colspan="2"><b><? echo $tablehead ?></b></td></tr>
 
                    <tr bgcolor="<?=$this->bgcolor?>"><td class="dia_normal">
 
                    <table border="0" cellpadding="0" cellspacing="0" width="100%">
 
                    <tr>
 
                        <td class="dia_small" valign="bottom"><b><? echo $yachse ?></b><br><br></td><td valign="bottom"><img src="<?=$this->imagefolder?>up_spitze.gif" border="0"></td>
 
                        <td colspan="2" class="dia_small" align="right"><?
 
                            $colorcount=0;
 
                            for($i=0;$i<count($legende);$i++){                                
 
                                echo "<font    color=\"".$this->bar_colors[$colorcount]."\"><b>$legende[$i]</b>";
 
                                if($this->show_cap_avg){        
 
                                    echo "( ".round($cap_avg[$i]/$anzahl,2).$this->measure." )";                                        
 
                                }
 
                                echo "</font><br>";
 
                                $colorcount=($colorcount+1)%count($this->bar_colors);
 
                            }                    
 
                        ?></td>
 
                    </tr>
 
            
 
                    <?
 
                
 
                    $i=true;
 
                    foreach($werte as $bezeichner => $values){
 
                        
 
                        $colorcount=0;                        
 
                        echo "<tr><td class=\"dia_small\" align=\"right\" valign=\"top\"><nobr>$bezeichner</nobr>";
 
                        if(is_array($avg))
 
                                    echo " ($avg[$a]".$this->measure.")";
 
                        $a++;
 
                        echo "</td>";
 
                        
 
                        if($i)
 
                            echo "<td rowspan=\"$anzahl\" background=\"".$this->imagefolder."up_dia.gif\" class=\"dia_very_small\"> </td>";    
 
                        
 
                        
 
                        echo "<td width=\"100%\" class=\"dia_very_small\">";
 
                        
 
                        foreach($values as $x){
 
                            $prozent=round(100/$max*$x);
 
                            
 
                            if($this->show_x_values){
 
                                echo "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\"><tr><td class=\"dia_small\" width=\"100%\">";    
 
                            }
 
                            
 
                            echo "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"$prozent%\"><tr><td width=\"100%\" bgcolor=\"".$this->bar_colors[$colorcount]."\"><img src=\"".$this->imagefolder."pixel.gif\" width=\"$prozent%\" height=\"4\" border=\"0\"></td></tr></table>";
 
                            
 
                            if($this->show_x_values){
 
                                echo "</td><td class=\"dia_very_small\"><nobr> $x <b>".$this->measure."</b></nobr></td></tr></table>";    
 
                            }
 
                        
 
                            $colorcount=($colorcount+1)%count($this->bar_colors);
 
                        }                    
 
                        echo "<br></td><td class=\"dia_small\"></td></tr>";    
 
                        $i=false;                        
 
                    }
 
                    ?>
 
                    <tr><td class="dia_normal"><span></span></td><td valign="top"><img src="<?=$this->imagefolder?>ecke.gif" border="0"></td><td background="<?=$this->imagefolder?>right_dia.gif"><img src="<?=$this->imagefolder?>right_dia.gif" border="0"></td><td class="dia_normal"><img src="<?=$this->imagefolder?>right_spitze.gif" border="0"></td></tr>
 
                    <tr><td colspan="4" align="right" class="dia_small"><b><?=$xachse ?> </b>(<?=$this->maxstring?>:<? echo $max." ".$this->measure;?>)</td></tr>
 
                    
 
                    </table></td></tr>
 
                    </table></td></tr></table>
 
                <?
 
            }
 
        }
 
    }
 
}
 
 
?>
 
 |