<?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();
?>