values = array(234, 125, 289, 147, 190); echo $graph->create(); Returns HTML code ====================================================================================================== */ $graphstyle_nr = 1; class BAR_GRAPH { //---------------------------------------------------------------------------------------------------- // Configuration //---------------------------------------------------------------------------------------------------- var $type = 'hBar'; // graph type: "hBar", "vBar", "pBar", or "fader" var $values; // graph data: string with comma-separated values or array var $graphBGColor = '#E2FFC6'; // graph background color: string var $graphBorder = '#E2FFC6'; // graph border: string (CSS specification; doesn't work with NN4) var $graphPadding = 0; // graph padding: integer (pixels) var $labels; // label names: string with comma-separated values or array var $labelColor = '#7B3800'; // label font color: string var $labelBGColor = '#E2FFC6'; // label background color: string var $labelBorder = '1px'; // ('2px groove white') label border: string (CSS specification; doesn't work with NN4) var $labelFont = 'Thaoma, Verdana'; // label font family: string (CSS specification) var $labelSize = 10; // label font size: integer (pixels) var $labelSpace = 0; // additional space between labels (pixels) var $barWidth = 10; // bar width: integer (pixels) var $barLength = 1.0; // bar length ratio: float (from 0.1 to 2.9) var $barColor = '#FF8800'; // bar color OR bar image: string with comma-separated values or array var $barBGColor = '#E2FFC6'; // bar background color: string var $barBorder = '2px outset white'; // () bar border: string (CSS specification; doesn't work with NN4) var $barLevelColor = ''; // bar level color: array (bLevel, bColor); draw bars >= bLevel with bColor var $showValues = 0; // show values: 0 = % only, 1 = abs. and %, 2 = abs. only, 3 = none var $absValuesColor; // abs. values font color: string (if not set, same color like labels) var $absValuesBGColor; // abs. values background color: string (if not set, same color like labels) var $absValuesBorder; // abs. values border: string (CSS specification; doesn't work with NN4; if not set, same border like labels) var $absValuesFont = 'Thaoma, Verdana'; // abs. values font family: string (CSS specification) var $absValuesSize = 10; // abs. values font size: integer (pixels) var $absValuesPrefix = ''; // abs. values prefix: string (e.g. currency) var $percValuesColor = '#7B3800'; // perc. values font color: string var $percValuesFont = 'Thaoma, Verdana'; // perc. values font family: string (CSS specification) var $percValuesSize = 10; // perc. values font size: integer (pixels) var $percValuesDecimals = 1; // perc. values number of decimals: integer var $charts = 1; // number of charts: integer // hBar/vBar only: var $legend; // legend items: string with comma-separated values or array var $legendColor = '#7B3800'; // legend font color: string var $legendBGColor = '#E2FFC6'; // legend background color: string var $legendBorder = '0px'; // legend border: string (CSS specification; doesn't work with NN4) var $legendFont = 'Thaoma, Verdana'; // legend font family: string (CSS specification) var $legendSize = 10; // legend font size: integer (pixels) // debug mode: false = off, true = on; just shows some extra information var $debug = false; // default bar colors; only used if $barColor isn't set var $colors = array('#0000FF', '#FF0000', '#00E000', '#A0A0FF', '#FFA0A0', '#00A000'); // error messages var $err_type = 'ERROR: Type must be "hBar", "vBar", "pBar", or "fader"'; // CSS class names (don't change) var $clsGRAPH; var $clsBAR; var $clsBARBG; var $clsLABEL; var $clsLABELBG; var $clsLEGEND; var $clsLEGENDBG; var $clsABSVALUES; var $clsPERCVALUES; //---------------------------------------------------------------------------------------------------- // Functions //---------------------------------------------------------------------------------------------------- function BAR_GRAPH($type = '') { global $graphstyle_nr; if($type) $this->type = $type; if(!$graphstyle_nr) $graphstyle_nr = 1; $this->clsGRAPH = 'clsGRAPH' . $graphstyle_nr; $this->clsBAR = 'clsBAR' . $graphstyle_nr; $this->clsBARBG = 'clsBARBG' . $graphstyle_nr; $this->clsLABEL = 'clsLABEL' . $graphstyle_nr; $this->clsLABELBG = 'clsLABELBG' . $graphstyle_nr; $this->clsLEGEND = 'clsLEGEND' . $graphstyle_nr; $this->clsLEGENDBG = 'clsLEGENDBG' . $graphstyle_nr; $this->clsABSVALUES = 'clsABSVALUES' . $graphstyle_nr; $this->clsPERCVALUES = 'clsPERCVALUES' . $graphstyle_nr; $graphstyle_nr++; } function set_style() { $style = ''; return $style; } function level_color($value, $color) { if($this->barLevelColor) { if(($this->barLevelColor[0] > 0 && $value >= $this->barLevelColor[0]) || ($this->barLevelColor[0] < 0 && $value <= $this->barLevelColor[0])) { $color = $this->barLevelColor[1]; } } return $color; } function draw_bar($width, $height, $color) { $bg = eregi('\.(jpg|jpeg|jpe|gif|png)$', $color) ? 'background' : 'bgcolor'; $bar = ''; $bar .= '
'; $bar .= ''; $bar .= ''; $bar .= '
'; $bar .= '
'; return $bar; } function set_fader($width, $height, $x, $color) { $btn = ''; $x -= round($width / 2); if($x > 0) $btn .= ''; $btn .= ''; $btn .= '
' . $this->draw_bar($width, $height, $color) . '
'; return $btn; } function show_value($val, $max_dec, $sum = 0, $align = '') { $val = $max_dec ? sprintf('%.' . $max_dec . 'f', $val) : $val; if($sum) $sum = $max_dec ? sprintf('%.' . $max_dec . 'f', $sum) : $sum; $value = 'absValuesPrefix . $val; if($sum) $value .= ' / ' . $this->absValuesPrefix . $sum; $value .= ' '; return $value; } function build_legend($barColors) { $legend = ''; $legend .= '
'; $legend .= ''; $l = (is_array($this->legend)) ? $this->legend : explode(',', $this->legend); for($i = 0; $i < count($barColors); $i++) { $legend .= ''; $legend .= ''; $legend .= ''; $legend .= ''; } $legend .= '
' . $this->draw_bar($this->barWidth, $this->barWidth, $barColors[$i]) . '' . trim($l[$i]) . '
'; return $legend; } function create() { global $graphstyle_nr; error_reporting(E_WARNING); $this->type = strtolower($this->type); $d = (is_array($this->values)) ? $this->values : explode(',', $this->values); if(is_array($this->labels)) $r = $this->labels; else $r = (strlen($this->labels) > 1) ? explode(',', $this->labels) : array(); if($this->barColor) $drf = (is_array($this->barColor)) ? $this->barColor : explode(',', $this->barColor); else $drf = array(); $val = $bc = array(); if($this->barLength < 0.1) $this->barLength = 0.1; else if($this->barLength > 2.9) $this->barLength = 2.9; $bars = (count($d) > count($r)) ? count($d) : count($r); if(!$this->absValuesColor) $this->absValuesColor = $this->labelColor; if(!$this->absValuesBGColor) $this->absValuesBGColor = $this->labelBGColor; if(!$this->absValuesBorder) $this->absValuesBorder = $this->labelBorder; if($this->type == 'pbar' || $this->type == 'fader') { if(!$this->barBGColor) $this->barBGColor = $this->labelBGColor; if($this->labelBGColor == $this->barBGColor) { $this->labelBGColor = ''; $this->labelBorder = ''; } } $graph = ''; $graph .= '
'; if($this->legend && $this->type != 'pbar' && $this->type != 'fader') $graph .= '
'; if($this->charts > 1) { $divide = ceil($bars / $this->charts); $graph .= ''; if($this->type == 'vbar') $graph .= ''; $graph .= '
'; } else $divide = 0; for($i = $sum = $max = $max_neg = $max_dec = $ccnt = $lcnt = $chart = 0; $i < $bars; $i++) { if($divide && $i && !($i % $divide)) { $lcnt = 0; $chart++; } $drw = explode(';', $d[$i]); for($j = $dec = 0; $j < count($drw); $j++) { $val[$chart][$lcnt][$j] = $v = (float)trim($drw[$j]); if($v > $max) $max = $v; else if($v < $max_neg) $max_neg = $v; if($v < 0) $v *= -1; $sum += $v; if(strstr($v, '.')) { $dec = strlen(substr($v, strrpos($v, '.') + 1)); if($dec > $max_dec) $max_dec = $dec; } if(!$bc[$j]) { if($ccnt >= count($this->colors)) $ccnt = 0; $bc[$j] = (!$drf[$j] || strlen($drf[$j]) < 3) ? $this->colors[$ccnt++] : trim($drf[$j]); } } $lcnt++; } $border = (int)$this->barBorder; $mPerc = $sum ? round($max * 100 / $sum) : 0; if($this->type == 'pbar' || $this->type == 'fader') $mul = 2; else $mul = $mPerc ? 100 / $mPerc : 1; $mul *= $this->barLength; if($this->showValues < 2) { if($this->type == 'hbar') $valSpace = ($this->percValuesDecimals * ($this->percValuesSize / 1.7)) + ($this->percValuesSize * 2.2); else $valSpace = $this->percValuesSize * 1.2; } else $valSpace = $this->percValuesSize; $spacer = $maxSize = round($mPerc * $mul + $valSpace + $border * 2); if($max_neg) { $mPerc_neg = $sum ? round(-$max_neg * 100 / $sum) : 0; $spacer_neg = round($mPerc_neg * $mul + $valSpace + $border * 2); $maxSize += $spacer_neg; } for($chart = $lcnt = 0; $chart < count($val); $chart++) { $graph .= ''; if($this->type == 'hbar') { for($i = 0; $i < count($val[$chart]); $i++, $lcnt++) { $label = ($lcnt < count($r)) ? trim($r[$lcnt]) : $lcnt+1; $rowspan = count($val[$chart][$i]); $graph .= ''; for($j = 0; $j < count($val[$chart][$i]); $j++) { $percent = $sum ? $val[$chart][$i][$j] * 100 / $sum : 0; $bColor = $this->level_color($val[$chart][$i][$j], $bc[$j]); if($this->showValues == 1 || $this->showValues == 2) $graph .= $this->show_value($val[$chart][$i][$j], $max_dec, 0, 'right'); $graph .= ''; if($j < count($val[$chart][$i]) - 1) $graph .= ''; } if($this->labelSpace && $i < count($val[$chart])-1) $graph .= ''; } } else if($this->type == 'vbar') { $graph .= ''; for($i = 0; $i < count($val[$chart]); $i++) { for($j = 0; $j < count($val[$chart][$i]); $j++) { $percent = $sum ? $val[$chart][$i][$j] * 100 / $sum : 0; $bColor = $this->level_color($val[$chart][$i][$j], $bc[$j]); $graph .= ''; } if($this->labelSpace) $graph .= ''; } if($this->showValues == 1 || $this->showValues == 2) { $graph .= ''; for($i = 0; $i < count($val[$chart]); $i++) { for($j = 0; $j < count($val[$chart][$i]); $j++) { $graph .= $this->show_value($val[$chart][$i][$j], $max_dec); } if($this->labelSpace) $graph .= ''; } } $graph .= ''; for($i = 0; $i < count($val[$chart]); $i++, $lcnt++) { $label = ($lcnt < count($r)) ? trim($r[$lcnt]) : $lcnt+1; $colspan = count($val[$chart][$i]); $graph .= ''; if($this->labelSpace) $graph .= ''; } $graph .= ''; } else if($this->type == 'pbar' || $this->type == 'fader') { for($i = 0; $i < count($val[$chart]); $i++, $lcnt++) { $label = ($lcnt < count($r)) ? trim($r[$lcnt]) : ''; $graph .= ''; if($label) { $graph .= ''; } $sum = (float)$val[$chart][$i][1]; $percent = $sum ? $val[$chart][$i][0] * 100 / $sum : 0; if($this->showValues == 1 || $this->showValues == 2) $graph .= $this->show_value($val[$chart][$i][0], $max_dec, $sum, 'right'); $graph .= ''; if($this->showValues < 2) $graph .= ''; $graph .= ''; if($this->labelSpace && $i < count($val[$chart])-1) $graph .= ''; } } else $graph .= ''; $graph .= '
1) ? ' rowspan=' . $rowspan : '') . ' align=left>'; $graph .= ' ' . $label . ' '; $graph .= ''; if($percent < 0) { $percent *= -1; $graph .= ''; } else { if($max_neg) { $graph .= ''; } if($percent) { $graph .= ''; } else $graph .= ''; $graph .= ''; } $graph .= '
'; if($this->showValues < 2) $graph .= '' . number_format($percent, $this->percValuesDecimals) . '%'; $graph .= ' '; $graph .= $this->draw_bar(round($percent * $mul), $this->barWidth, $bColor); $graph .= ''; $graph .= '
'; $graph .= $this->draw_bar(round($percent * $mul), $this->barWidth, $bColor); $graph .= ''; if($this->showValues < 2) $graph .= ' ' . number_format($percent, $this->percValuesDecimals) . '%'; $graph .= ' 
'; $graph .= ''; if($percent < 0) { $percent *= -1; $graph .= ''; $graph .= ''; } else { $graph .= ''; if($percent) { $graph .= ''; } else $graph .= ''; if($max_neg) { $graph .= ''; } } $graph .= '
'; $graph .= $this->draw_bar($this->barWidth, round($percent * $mul), $bColor); $graph .= '
'; $graph .= ($this->showValues < 2) ? '' . number_format($percent, $this->percValuesDecimals) . '%' : ' '; $graph .= ''; if($this->showValues < 2) $graph .= number_format($percent, $this->percValuesDecimals) . '%'; $graph .= '
'; $graph .= $this->draw_bar($this->barWidth, round($percent * $mul), $bColor); $graph .= '
'; $graph .= '
1) ? ' colspan=' . $colspan : '') . '>'; $graph .= ' ' . $label . ' 
'; $graph .= ' ' . $label . ' '; $this->barColor = $drf[$i] ? trim($drf[$i]) : $this->colors[0]; $bColor = $this->level_color($val[$chart][$i][0], $this->barColor); $graph .= ''; $graph .= '
'; if($this->type == 'fader') $graph .= $this->set_fader(6, $this->barWidth, round($percent * $mul), $bColor); else $graph .= $this->draw_bar(round($percent * $mul), $this->barWidth, $bColor); $graph .= '
 ' . number_format($percent, $this->percValuesDecimals) . '%
' . $this->err_type . '
'; if($chart < $this->charts - 1 && count($val[$chart+1])) { $graph .= '
'; } } if($this->charts > 1) $graph .= '
'; if($this->legend && $this->type != 'pbar' && $this->type != 'fader') { $graph .= '
 '; $graph .= $this->build_legend($bc); $graph .= '
'; } if($this->debug) { $graph .= "
sum=$sum max=$max max_neg=$max_neg mPerc=$mPerc "; $graph .= "mPerc_neg=$mPerc_neg mul=$mul valSpace=$valSpace"; } $graph .= '
'; $graph .= $this->set_style(); return $graph; } } ?>