diff -r b07b23187b17 -r eb92dc5d9fb4 graphs.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graphs.php Sat Nov 15 14:59:51 2008 -0500 @@ -0,0 +1,1051 @@ + 7, 'b' => 3, 'c' => 6, 'd' => 0, 'e' => 2); + /** + * GraphMaker::bar_padding + * Padding of bars + */ + var $bar_padding = 5; + /** + * GraphMaker::bar_bordercolor + * Border color of bars + */ + var $bar_bordercolor = array(39, 78, 120); + /** + * GraphMaker::bar_bgcolor + * Background color of bars + */ + var $bar_bgcolor = array(69, 129, 194); + //--------------------------------------------- + /** + * GraphMaker::graph_areaheight + * Height of graphic area + */ + var $graph_areaheight = 100; + /** + * GraphMaker::graph_padding + * Paddings of graph + */ + var $graph_padding = array('left' => 50, 'top' => 20, 'right' => 20, 'bottom' => 20); + /** + * GraphMaker::graph_title + * Title text of graph + */ + var $graph_title = ""; + /** + * GraphMaker::graph_bgcolor + * Background color of graph + */ + var $graph_bgcolor = array(255, 255, 255); + /** + * GraphMaker::graph_bgtransparent + * Boolean for background transparency + */ + var $graph_bgtransparent = 0; + /** + * GraphMaker::graph_transparencylevel + * Transparency level (0=opaque, 127=transparent) + */ + var $graph_transparencylevel = 0; + /** + * GraphMaker::graph_borderwidth + * Width of graph border + */ + var $graph_borderwidth = 1; + /** + * GraphMaker::graph_bordercolor + * Border color of graph + */ + var $graph_bordercolor = array(218, 218, 239); + /** + * GraphMaker::graph_titlecolor + * Color of title text of graph + */ + var $graph_titlecolor = array(99, 88, 78); + //--------------------------------------------- + /** + * GraphMaker::axis_step + * Scale step of axis + */ + var $axis_step = 2; + /** + * GraphMaker::axis_bordercolor + * Border color of axis + */ + var $axis_bordercolor = array(99, 88, 78); + /** + * GraphMaker::axis_bgcolor + * Background color of axis + */ + var $axis_bgcolor = array(152, 137, 124); + + /**************************************************************** + GRAPH + ****************************************************************/ + + /** + * GraphMaker::SetGraphAreaHeight() + * Sets graph height (not counting top and bottom margins) + **/ + function SetGraphAreaHeight($height) { + if ($height > 0) $this->graph_areaheight = $height; + } + + /** + * GraphMaker::SetGraphPadding() + * Sets graph padding (margins) + **/ + function SetGraphPadding($left, $top, $right, $bottom) { + $this->graph_padding = array('left' => (int) $left, + 'top' => (int) $top, + 'right' => (int) $right, + 'bottom' => (int) $bottom); + } + + /** + * GraphMaker::SetGraphTitle() + * Set title text + **/ + function SetGraphTitle($title) { + $this->graph_title = $title; + } + + /** + * GraphMaker::SetGraphBorderColor() + * Sets border color for graph + **/ + function SetGraphBorderColor($red, $green, $blue) { + $this->graph_bordercolor = array($red, $green, $blue); + } + + /** + * GraphMaker::SetGraphBorderWidth() + * Set width of border. 0 disables border + **/ + function SetGraphBorderWidth($width = 0) { + $this->graph_borderwidth = $width; + } + + /** + * GraphMaker::SetGraphBackgroundColor() + * Sets background color for graph + **/ + function SetGraphBackgroundColor($red, $green, $blue) { + $this->graph_bgcolor = array($red, $green, $blue); + } + + /** + * GraphMaker::SetGraphBackgroundTransparent() + * Sets background color for graph (and set it transparent) + **/ + function SetGraphBackgroundTransparent($red, $green, $blue, $addtransparency = 1) { + $this->graph_bgcolor = array($red, $green, $blue); + $this->graph_bgtransparent = ($addtransparency ? 1 : 0); + } + + /** + * GraphMaker::SetGraphTitleColor() + * Sets title color for graph + **/ + function SetGraphTitleColor($red, $green, $blue) { + $this->graph_titlecolor = array($red, $green, $blue); + } + + /** + * GraphMaker::SetGraphTransparency() + * Sets transparency for graph + **/ + function SetGraphTransparency($percent) { + if ($percent < 0) $percent = 0; + elseif ($percent > 100) $percent = 127; + else $percent = $percent * 1.27; + $this->graph_transparencylevel = $percent; + } + + /**************************************************************** + BAR + ****************************************************************/ + + /** + * GraphMaker::SetBarBorderColor() + * Sets border color for bars + **/ + function SetBarBorderColor($red, $green, $blue) { + $this->bar_bordercolor = array($red, $green, $blue); + } + + /** + * GraphMaker::SetBarBackgroundColor() + * Sets background color for bars + **/ + function SetBarBackgroundColor($red, $green, $blue) { + $this->bar_bgcolor = array($red, $green, $blue); + } + + /** + * GraphMaker::SetBarData() + * Sets data of graph (parameter should be an array with key + * being the name of the bar and the value the value of the bar. + **/ + function SetBarData($data) { + if (is_array($data)) $this->bar_data = $data; + } + + /** + * GraphMaker::SetBarDimensions() + * Sets with and height of each bar + **/ + function SetBarDimensions($width, $height) { + if ($width > 0) $this->bar_width = $width; + if ($height > 0) $this->bar_height = $height; + } + + /** + * GraphMaker::SetBarPadding() + * Sets padding (border) around each bar + **/ + function SetBarPadding($padding) { + if ($padding > 0) $this->bar_padding = $padding; + } + + /**************************************************************** + AXIS + ****************************************************************/ + + /** + * GraphMaker::SetAxisBorderColor() + * Sets border color for axis + **/ + function SetAxisBorderColor($red, $green, $blue) { + $this->axis_bordercolor = array($red, $green, $blue); + } + + /** + * GraphMaker::SetAxisBackgroundColor() + * Sets background color for axis + **/ + function SetAxisBackgroundColor($red, $green, $blue) { + $this->axis_bgcolor = array($red, $green, $blue); + } + + /** + * GraphMaker::SetAxisStep() + * Sets axis scale step + **/ + function SetAxisStep($step) { + if ($step > 0) $this->axis_step = $step; + } + + /** + * GraphMaker::GetFinalGraphDimensions() + * From the values already setted, it calculates image + * width and height + **/ + function GetFinalGraphDimensions() { + $w = $this->graph_padding['left'] + + (count($this->bar_data) * ($this->bar_width + ($this->bar_padding * 2))) + + $this->graph_padding['right']; + $h = $this->graph_padding['top'] + + $this->graph_areaheight + + $this->graph_padding['bottom']; + return array($w, $h); + } + + /** + * GraphMaker::LoadGraph() + * Loads definitions from a file + **/ + function LoadGraph($path) { + if (($fp = @fopen($path, "r")) !== false) { + $content = ""; + while (!feof($fp)) { // I do not use filesize() here + $content .= fread($fp, 4096); // because of remote files. If + } // there is no problem with them + fclose($fp); // please let me know + $this->__LoadGraphDefinitions($content); + return true; + } else return false; + } + + /** + * GraphMaker::DrawGraph() + * Draw all the graph: bg, axis, bars, text.. and output it + * Optional file parameter turns output to file, and bool on success + **/ + function DrawGraph($file = "") { + list($w, $h) = $this->GetFinalGraphDimensions(); + $this->graph_width = $w; + $this->graph_height = $h; + + $this->im = imagecreatetruecolor($w, $h); + if ($this->graph_transparencylevel) { + imagealphablending($this->im, true); + } + + $this->__PaintBackground(); + $this->__DrawAxis(); + + $p = 0; + foreach ($this->bar_data as $name => $value) { + $p++; + $this->__DrawBarText($p, $name); + $this->__DrawBar($p, $value); + } + + if (strlen($this->graph_title)) { + $this->__AllocateColor("im_graph_titlecolor", + $this->graph_titlecolor, + $this->graph_transparencylevel); + $this->__DrawText($this->graph_title, + floor($this->graph_width / 2), + $this->graph_borderwidth + 2, + $this->im_graph_titlecolor, + 2, + 1); + } + + if (strlen($file)) { + $ret = imagepng($this->im, $file); + } else { + header('Content-Type: image/png'); + imagepng($this->im); + $ret = true; + } + imagedestroy($this->im); + return $ret; + } + + /** + * GraphMaker::PaintBackground() + * Draw all the graph: bg, axis, bars, text.. and output it + * Optional file parameter turns output to file, and bool on success + **/ + function __PaintBackground() { + $this->__AllocateColor("im_graph_bgcolor", + $this->graph_bgcolor, + 0); + imagefilledrectangle($this->im, + 0, + 0, + $this->graph_width, + $this->graph_height, + $this->im_graph_bgcolor); + if ($this->graph_bgtransparent) { + imagecolortransparent($this->im, $this->im_graph_bgcolor); + } + if ($this->graph_borderwidth) { + $this->__AllocateColor("im_graph_bordercolor", + $this->graph_bordercolor, + $this->graph_transparencylevel); + for ($i = 0; $i < $this->graph_borderwidth; $i++) { + imagerectangle($this->im, + $i, + $i, + $this->graph_width - 1 - $i, + $this->graph_height - 1 - $i, + $this->im_graph_bordercolor); + } + } + } + + /** + * GraphMaker::__DrawAxis() + * Draws all the axis stuff (and scale steps) + **/ + function __DrawAxis() { + $this->__AllocateColor("im_axis_bordercolor", + $this->axis_bordercolor, + $this->graph_transparencylevel); + $this->__AllocateColor("im_axis_bgcolor", + $this->axis_bgcolor, + $this->graph_transparencylevel); + $this->__DrawPolygon($this->graph_padding['left'], $this->graph_height - $this->graph_padding['bottom'], + $this->graph_padding['left'], $this->graph_padding['top'], + $this->graph_padding['left'] + $this->bar_height - 1, $this->graph_padding['top'] - $this->bar_height + 1, + $this->graph_padding['left'] + $this->bar_height - 1, $this->graph_height - $this->graph_padding['bottom'] - $this->bar_height + 1, + $this->im_axis_bgcolor, true); + $this->__DrawPolygon($this->graph_padding['left'], $this->graph_height - $this->graph_padding['bottom'], + $this->graph_padding['left'], $this->graph_padding['top'], + $this->graph_padding['left'] + $this->bar_height - 1, $this->graph_padding['top'] - $this->bar_height + 1, + $this->graph_padding['left'] + $this->bar_height - 1, $this->graph_height - $this->graph_padding['bottom'] - $this->bar_height + 1, + $this->im_axis_bordercolor); + + $this->__DrawPolygon($this->graph_padding['left'], $this->graph_height - $this->graph_padding['bottom'], + $this->graph_padding['left'] + $this->bar_height - 1, $this->graph_height - $this->graph_padding['bottom'] - $this->bar_height + 1, + $this->graph_width - $this->graph_padding['right'] + $this->bar_height - 1, $this->graph_height - $this->graph_padding['bottom'] - $this->bar_height + 1, + $this->graph_width - $this->graph_padding['right'], $this->graph_height - $this->graph_padding['bottom'], + $this->im_axis_bgcolor, true); + $this->__DrawPolygon($this->graph_padding['left'], $this->graph_height - $this->graph_padding['bottom'], + $this->graph_padding['left'] + $this->bar_height - 1, $this->graph_height - $this->graph_padding['bottom'] - $this->bar_height + 1, + $this->graph_width - $this->graph_padding['right'] + $this->bar_height - 1, $this->graph_height - $this->graph_padding['bottom'] - $this->bar_height + 1, + $this->graph_width - $this->graph_padding['right'], $this->graph_height - $this->graph_padding['bottom'], + $this->im_axis_bordercolor); + + // draw lines that separate bars + $total_bars = count($this->bar_data); + for ($i = 1; $i < $total_bars; $i++) { + $offset = $this->graph_padding['left'] + + (($this->bar_width + ($this->bar_padding * 2)) * $i); + imageline($this->im, + $offset, + $this->graph_height - $this->graph_padding['bottom'], + $offset + $this->bar_height - 1, + $this->graph_height - $this->graph_padding['bottom'] - $this->bar_height + 1, + $this->im_axis_bordercolor); + } + + // draw scale steps + $max_value = $this->__GetMaxGraphValue(); + if (($max_value % 10) > 0) { + $max_value = $max_value + (10 - ($max_value % 10)); + } + $this->axis_max = $max_value; + $y = 0; + $style = array($this->im_axis_bordercolor, $this->im_graph_bgcolor); + imagesetstyle($this->im, $style); + while ($y <= $max_value) { + if ($max_value == 0) { $max_value=1; } // corrected by Marcelo Trenkenchu + $offset = floor($this->graph_height - $this->graph_padding['bottom'] - + ($y * $this->graph_areaheight / $max_value)); + imageline($this->im, + $this->graph_padding['left'], + $offset, + $this->graph_padding['left'] + $this->bar_height - 1, + $offset - $this->bar_height + 1, + $this->im_axis_bordercolor); + $this->__DrawText($y, + $this->graph_padding['left'], + $offset, + $this->im_axis_bordercolor, + 1, + 2, + 1); + // gridline + if ($y > 0) { + imageline($this->im, + $this->graph_padding['left'] + $this->bar_height, + $offset - $this->bar_height + 1, + $this->graph_width - $this->graph_padding['right'] + $this->bar_height - 1, + $offset - $this->bar_height + 1, + IMG_COLOR_STYLED); + } + $y += $this->axis_step; + } + + imageline($this->im, + $this->graph_width - $this->graph_padding['right'] + $this->bar_height - 1, + $this->graph_padding['top'] - $this->bar_height + 1, + $this->graph_width - $this->graph_padding['right'] + $this->bar_height - 1, + $this->graph_height - $this->graph_padding['bottom'] - $this->bar_height, + IMG_COLOR_STYLED); + } + + /** + * GraphMaker::__DrawText() + * Draws text on image with color, size and alignment options + **/ + function __DrawText($text, $x, $y, $color, $size = 1, $align = 0, $valign = 0) { + /* + * Align: 0=left | 1=center | 2=right + */ + if ($align == 1) $x -= floor(strlen($text) * imagefontwidth($size) / 2); + elseif ($align == 2) $x -= (strlen($text) * imagefontwidth($size)); + if ($valign == 1) $y -= floor(imagefontheight($size) / 2); + elseif ($valign == 2) $y -= imagefontheight($size); + imagestring($this->im, + $size, + $x, + $y, + $text, + $color); + } + + /** + * GraphMaker::__GetMaxGraphValue() + * Returns max bar value + **/ + function __GetMaxGraphValue() { + $max_value = 0; + foreach ($this->bar_data as $name => $value) { + if ($value > $max_value) $max_value = $value; + } + return $max_value; + } + + /** + * GraphMaker::__DrawBarText() + * Determines top and left to draw text to a choosen bar + **/ + function __DrawBarText($bar, $text) { + $this->__DrawText($text, + $this->graph_padding['left'] + (($this->bar_width + ($this->bar_padding * 2)) * ($bar - 0.5)), + $this->graph_height - $this->graph_padding['bottom'] + 1, + $this->axis_bordercolor, + 1, + 1); + } + + /** + * GraphMaker::__DrawBar() + * Draws a choosen bar with it's value + **/ + function __DrawBar($bar, $value) { + $x = $this->graph_padding['left'] + + (($this->bar_width + ($this->bar_padding * 2)) * ($bar - 1)) + + $this->bar_padding; + if ($this->axis_max == 0) { $this->axis_max = 1; } // corrected by Marcelo Trenkenchu + $y = $value * $this->graph_areaheight / $this->axis_max; + $this->____DrawBar($x, + $this->graph_height - $this->graph_padding['bottom'] - $y, + $x + $this->bar_width, + $this->graph_height - $this->graph_padding['bottom']); + } + + /** + * GraphMaker::____DrawBar() + * Draws the actual rectangles that form a bar + **/ + function ____DrawBar($x1, $y1, $x2, $y2) { + $this->__AllocateColor("im_bar_bordercolor", + $this->bar_bordercolor, + $this->graph_transparencylevel); + $this->__AllocateColor("im_bar_bgcolor", + $this->bar_bgcolor, + $this->graph_transparencylevel); + $this->__DrawPolygon($x1, $y1, + $x2, $y1, + $x2, $y2, + $x1, $y2, + $this->im_bar_bgcolor, true); + $this->__DrawPolygon($x1, $y1, + $x2, $y1, + $x2, $y2, + $x1, $y2, + $this->im_bar_bordercolor); + $this->__DrawPolygon($x1, $y1, + $x2, $y1, + $x2 + $this->bar_height - 1, $y1 - $this->bar_height + 1, + $x1 + $this->bar_height - 1, $y1 - $this->bar_height + 1, + $this->im_bar_bgcolor, true); + $this->__DrawPolygon($x1, $y1, + $x2, $y1, + $x2 + $this->bar_height - 1, $y1 - $this->bar_height + 1, + $x1 + $this->bar_height - 1, $y1 - $this->bar_height + 1, + $this->im_bar_bordercolor); + $this->__DrawPolygon($x2, $y2, + $x2, $y1, + $x2 + $this->bar_height - 1, $y1 - $this->bar_height + 1, + $x2 + $this->bar_height - 1, $y2 - $this->bar_height + 1, + $this->im_bar_bgcolor, true); + $this->__DrawPolygon($x2, $y2, + $x2, $y1, + $x2 + $this->bar_height - 1, $y1 - $this->bar_height + 1, + $x2 + $this->bar_height - 1, $y2 - $this->bar_height + 1, + $this->im_bar_bordercolor); + } + + /** + * GraphMaker::__DrawPolygon() + * Draws a (filled) (ir)regular polygon + **/ + function __DrawPolygon($x1, $y1, $x2, $y2, $x3, $y3, $x4, $y4, $color, $filled = false) { + if ($filled) { + imagefilledpolygon($this->im, array($x1, $y1, $x2, $y2, $x3, $y3, $x4, $y4), 4, $color); + } else { + imagepolygon($this->im, array($x1, $y1, $x2, $y2, $x3, $y3, $x4, $y4), 4, $color); + } + } + + /** + * GraphMaker::__LoadGraphDefinitions() + * Loads definitions to a graph from text lines (normaly + * they come from a file). This function is called by + * GraphMaker::LoadGraph() + **/ + function __LoadGraphDefinitions($text) { + $text = preg_split("/\r?\n/", $text); + $data = array(); + $section = ''; + for ($i = 0; $i < count($text); $i++) { + if (preg_match("/^\s*#/", $text[$i])) { + //ignore.. it's just a comment + } elseif (preg_match("/^\s*\}\s*/", $text[$i])) { + $section = ''; + } elseif (preg_match("/^\s*(\w+)\s*\{\s*$/", $text[$i], $r)) { + $section = $r[1]; + } else { + $p = strpos($text[$i], "="); + if ($p !== false) { + $data[$section][trim(substr($text[$i], 0, $p))] = trim(substr($text[$i], $p + 1)); + } + } + } + if (is_array($data['graph'])) { + $this->__LoadGraphValues($data['graph']); + } + if (is_array($data['bar'])) { + $this->__LoadBarValues($data['bar']); + } + if (is_array($data['axis'])) { + $this->__LoadAxisValues($data['axis']); + } + if (is_array($data['data'])) { + $this->bar_data = $data['data']; + } + } + + /** + * GraphMaker::__LoadGraphValues() + * Loads definitions to main graph settings + **/ + function __LoadGraphValues($data) { + foreach ($data as $name => $value) { + $name = strtolower($name); + switch ($name) { + case 'background-color': + $this->__SetColorToValue("graph_bgcolor", $value); + break; + case 'border-color': + $this->__SetColorToValue("graph_bordercolor", $value); + break; + case 'title-color': + $this->__SetColorToValue("graph_titlecolor", $value); + break; + case 'background-transparent': + $this->graph_bgtransparent = ($value == 1 || $value == 'yes' ? 1 : 0); + break; + case 'transparency': + $this->SetGraphTransparency(str_replace('%', '', $value)); + break; + case 'title': + $this->graph_title = $value; + break; + case 'border-width': + $this->graph_borderwidth = (int) $value; + break; + case 'area-height': + $this->graph_areaheight = (int) $value; + break; + default: + if (substr($name, 0, 8) == 'padding-' && strlen($name) > 8) { + $this->graph_padding[substr($name, 8)] = $value; + } + } + } + } + + /** + * GraphMaker::__LoadBarValues() + * Loads definitions to bar settings + **/ + function __LoadBarValues($data) { + foreach ($data as $name => $value) { + $name = strtolower($name); + switch ($name) { + case 'background-color': + $this->__SetColorToValue("bar_bgcolor", $value); + break; + case 'border-color': + $this->__SetColorToValue("bar_bordercolor", $value); + break; + case 'padding': + $this->bar_padding = $value; + break; + case 'width': + $this->bar_width = (int) $value; + break; + case 'height': + $this->bar_height = (int) $value; + break; + } + } + } + + /** + * GraphMaker::__LoadAxisValues() + * Loads definitions to axis settings + **/ + function __LoadAxisValues($data) { + foreach ($data as $name => $value) { + switch (strtolower($name)) { + case 'step': + $this->SetAxisStep($value); + break; + case 'background-color': + $this->__SetColorToValue("axis_bgcolor", $value); + break; + case 'border-color': + $this->__SetColorToValue("axis_bordercolor", $value); + } + } + } + + /** + * GraphMaker::__SetColorToValue() + * Sets a color (rgb or in html format) to a variable + **/ + function __SetColorToValue($varname, $color) { + if ($color[0] == "#") { // if it's hex (html format), change to rgb array + if (strlen($color) == 4) { + // if only 3 hex values (I assume it's a shade of grey: #ddd) + $color .= substr($color, -3); + } + $color = array(hexdec($color[1].$color[2]), + hexdec($color[3].$color[4]), + hexdec($color[5].$color[6])); + } + $this->$varname = $color; + } + + function __AllocateColor($varname, $color, $alpha) { + $this->$varname = imagecolorallocatealpha($this->im, + $color[0], + $color[1], + $color[2], + $alpha); + } +} + +// Graph Generator for PHP +// Originally located at http://szewo.com/php/graph, but link was broken, so this file was retrieved from: +// http://web.archive.org/web/20030130065944/szewo.com/php/graph/graph.class.php3.txt +// License unknown, however sources on the web have shown this to be either GPL or public domain. + +// At this point this class has been very nearly rewritten for Enano. + +class GraphMaker_compat { + var $_values; + var $_ShowLabels; + var $_ShowCounts; + var $_ShowCountsMode; + + var $_BarWidth; + var $_GraphWidth; + var $_BarImg; + var $_BarBorderWidth; + var $_BarBorderColor; + var $_BarBackgroundColor; + var $_RowSortMode; + var $_TDClassHead; + var $_TDClassLabel; + var $_TDClassCount; + var $_GraphTitle; + + function __construct() { + $this->_values = array(); + $this->_ShowLabels = true; + $this->_BarWidth = 32; + $this->_GraphWidth = 360; + $this->_BarImg = scriptPath . "/images/graphbit.png"; + $this->_BarBorderWidth = 0; + $this->_BarBorderColor = "red"; + $this->_ShowCountsMode = 2; + $this->_RowSortMode = 1; + $this->_TDClassHead = "graph-title"; + $this->_TDClassLabel = "graph-label"; + $this->_TDClassCount = "graph-count"; + $this->_GraphTitle="Graph title"; + $this->_BarBackgroundColor = "#456798"; + } + + function GraphMaker_compat() { + $this->__construct(); + } + + function SetBarBorderWidth($width) { + $this->_BarBorderWidth = $width; + } + function SetBorderColor($color) { + $this->_BarBorderColor = $color; + } + + function SetBarBackgroundColor($color) + { + $this->_BarBackgroundColor = $color; + } + +// mode = 1 labels asc, 2 label desc + function SetSortMode($mode) { + switch ($mode) { + case 1: + asort($this->_values); + break; + case 2: + arsort($this->_values); + break; + default: + break; + } + + } + + function AddValue($labelName, $theValue) { + array_push($this->_values, array("label" => $labelName, "value" => $theValue)); + } + + function SetBarData($data) + { + foreach ( $data as $name => $value ) + { + $this->AddValue($name, $value); + } + } + function DrawGraph() + { + $this->BarGraphVert(); + } + function SetBarWidth($width) + { + $this->_BarWidth = $width; + } + function SetBarImg($img) + { + $this->_BarImg = $img; + } + function SetShowLabels($lables) + { + $this->_ShowLabels = $labels; + } + function SetGraphWidth($width) + { + $this->_GraphWidth = $width; + } + function SetGraphTitle($title) + { + $this->_GraphTitle = $title; + } + //mode = percentage or counts + function SetShowCountsMode($mode) + { + $this->_ShowCountsMode = $mode; + } + //mode = none(0) label(1) or count(2) + function SetRowSortMode($sortmode) + { + $this->_RowSortMode = $sortmode; + } + + function SetTDClassHead($class) + { + $this->_TDClassHead = $class; + } + function SetTDClassLabel($class) + { + $this->_TDClassLabel = $class; + } + function SetTDClassCount($class) + { + $this->_TDClassCount = $class; + } + function GetMaxVal() + { + $maxval = 0; + foreach ( $this->_values as $value ) + { + if ( $maxval < $value["value"] ) + { + $maxval = $value["value"]; + } + } + return $maxval; + } + function BarGraphVert() + { + $maxval = $this->GetMaxVal(); + foreach($this->_values as $value) + { + $sumval += $value["value"]; + } + + $this->SetSortMode($this->_RowSortMode); + + echo "\n\n
\n\n "; + + if ( strlen($this->_GraphTitle) > 0 ) + { + echo "\n \n \n "; + } + + echo "\n "; + $css_class = 'row1'; + + foreach($this->_values as $value) + { + $css_class = ( $css_class == 'row1' ) ? 'row3' : 'row1'; + echo " \n "; + } + echo "\n "; + if ( $this->_ShowCountsMode > 0 ) + { + $css_class = 'row1'; + echo "\n "; + foreach($this->_values as $value) + { + $css_class = ( $css_class == 'row1' ) ? 'row3' : 'row1'; + switch ($this->_ShowCountsMode) + { + case 1: + $count = round ( 100 * $value["value"] / $sumval ) . "%"; + break; + case 2: + $count = $value["value"]; + break; + default: + break; + } + echo " \n "; + } + echo "\n"; + } + + if ($this->_ShowLabels) + { + $css_class = 'row1'; + echo " \n "; + foreach($this->_values as $value) + { + $css_class = ( $css_class == 'row1' ) ? 'row3' : 'row1'; + echo " \n "; + } + echo "\n"; + } + + echo "
_values)."\" class=\"".$this->_TDClassHead."\">".$this->_GraphTitle."
\n "; + $width = $this->_BarWidth; + $height = ceil( $value["value"] * $this->_GraphWidth / $maxval ); + + echo "
_BarBackgroundColor}; border: ".$this->_BarBorderWidth."px solid ".$this->_BarBorderColor."\">\n "; + echo "
\n "; + + // echo "_BarImg."\" height=\"$width\" width=\"$height\" "; + // echo " style=\"border: ".$this->_BarBorderWidth."px solid ".$this->_BarBorderColor."\""; + // echo ">"; + + echo "
_TDClassCount."\">$count
_TDClassLabel."\""; + echo ">".$value["label"]."
"; + } + + function BarGraphHoriz() + { + $maxval = $this->GetMaxVal(); + + foreach($this->_values as $value) + { + $sumval += $value["value"]; + } + + $this->SetSortMode($this->_RowSortMode); + + echo ""; + + if ( strlen($this->_GraphTitle) > 0 ) + { + echo ""; + } + foreach($this->_values as $value) + { + if ($this->_ShowLabels) + { + echo ""; + echo ""; + } + echo ""; + if ( $this->_ShowCountsMode > 0 ) + { + switch ($this->_ShowCountsMode) + { + case 1: + $count = round(100 * $value["value"] / $sumval )."%"; + break; + case 2: + $count = $value["value"]; + break; /* Exit the switch and the while. */ + default: + break; + } + echo ""; + } + echo ""; + } + echo "
_ShowCountsMode > 0 ) + { + echo " colspan=\"2\""; + } + echo " class=\"".$this->_TDClassHead."\">".$this->_GraphTitle."
_TDClassLabel."\""; + if ( $this->_ShowCountsMode > 0 ) + { + echo " colspan=\"2\""; + } + echo ">".$value["label"]."
_TDClassCount."\">$count"; + $height = $this->_BarWidth; + $width = ceil( $value["value"] * $this->_GraphWidth / $maxval ); + echo "
_BarBorderWidth."px solid ".$this->_BarBorderColor."\">\n "; + echo "
\n "; + //echo "_BarImg."\" height=$height width=$width "; + //echo " style=\"border: ".$this->_BarBorderWidth."px solid ".$this->_BarBorderColor."\""; + //echo ">"; + echo "
"; + } + /** + * Dummy functions for compatibility with the GD version of the class + */ + + function SetGraphPadding($a, $b, $c, $d) + { + return true; + } + function SetBarPadding($a) + { + return true; + } + function SetAxisStep($a) + { + return true; + } + function SetGraphBackgroundTransparent($r, $g, $b, $a) + { + return true; + } + function SetGraphTransparency($a) + { + return true; + } + function SetGraphAreaHeight($a) + { + return true; + } +} + +