Location: PHPKode > projects > TelDaBase > teldabase-1.4/teldabase/stat_bew_img.php
<?php
require('Image/Graph.php');

function getData($link)
{
    require("conf.php");
    /* Daten aus DB holen */

    $link = mysql_connect($tdb["host"],$tdb["user"],$tdb["pass"])
      or die ("TelDaBase mysql-Server konnte nicht kontaktiert werden");
    mysql_select_db ($tdb["db"], $link)
      or die ("TelDaBase mysql-Server konnte nicht kontaktiert werden");
    
    $query = "select Konto.rechnung_id, date_format(rech_datum,\"%d.%m.%Y\") 
               as rech_date, Konto.bewohner_id, bew_name, 
		 kon_betrag from Rechnungen
	       left join Konto 
	       on (Rechnungen.rechnung_id = Konto.rechnung_id)
		 left join Bewohner 
	            on (Konto.bewohner_id = Bewohner.bewohner_id)
		 order by rech_datum";


    $result = mysql_query($query) 
      or die ("Query |$query| failed:" . mysql_error());
    return $result;
}

function neueFarbe(&$usedcolors)
{
    /* Farbe zufällig auswählen, jede Farbe nicht mehr als einmal pro
     * 20 Bewohner verwenden */
    
    do {
	$color = rand(4, 7) * 32;
      	     $color = $color*256 + rand(4, 7) * 32;
	$color = $color*256 + rand( 0,4) * 32;
    } while (isset($usedcolors[$color]) 
	     && ($usedcolors[$color] > (count($rech_data) / 20)));
    
    foreach(array(0, 32, 32*256, 32*256*256,
		  -32, -32*256, -32*356*256) as $offset)
    {
	if(!isset($usedcolors[$color + $offset]))
	  $usedcolors[$color + $offset] = 1;
	else
	  ++$usedcolors[$color + $offset];
    }
    return $color;
}

$xwidth = 700;
$ywidth = $xwidth * .6;

$Graph =& Image_Graph::factory('graph', array($xwidth, $ywidth));

$Font =& $Graph->addNew('ttf_font', './FreeSans.ttf');
$Font->setSize(10);
$Graph->setFont($Font);

$Graph->add(Image_Graph::vertical(
    Image_Graph::factory('title', array('Verteilung der monatlichen Kosten', 12)),        
		  Image_Graph::vertical(
					$Plotarea = Image_Graph::factory('plotarea'),
					$Legend = Image_Graph::factory('legend'), 88), 5 ));   

$Legend->setPlotarea($Plotarea);

$result = getData($link);

if(mysql_numrows($result) == 0)
{
    return;
}


$Fill =& Image_Graph::factory('Image_Graph_Fill_Array');

$usedcolors = array();
$color = 256*256-1;

while($row =  mysql_fetch_assoc($result))
  {
      if(!isset($rech_data[$row["bewohner_id"]]))
      {
	  $rech_data[$row["bewohner_id"]] =& Image_Graph::factory('dataset');
	  $rech_data[$row["bewohner_id"]]->setName($row["bew_name"]);

	  $color = neueFarbe($usedcolors);

	  $Fill->addColor("#".dechex($color));
      }
      
      if($row["kon_betrag"] < 0) /* nur positive Beträge  berücksichtigen */
	$rech_data[$row["bewohner_id"]]->addPoint(
			  $row["rech_date"], -$row["kon_betrag"] );
  } 

$bew_plot =& $Plotarea->addNew('bar', array($rech_data, 'stacked100pct'));
$bew_plot->setFillStyle($Fill);

$AxisX =& $Plotarea->getAxis(IMAGE_GRAPH_AXIS_X);
$AxisX->setFontAngle('vertical');
$AxisX->setLabelInterval($num_rechnungen / 10 + 1);

// output the Graph
$Graph->done();
?>
Return current item: TelDaBase