--- a/includes/graphs.php Fri May 29 13:55:16 2009 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1051 +0,0 @@
-<?php
-
-/*
- * Enano - an open-source CMS capable of wiki functions, Drupal-like sidebar blocks, and everything in between
- * Version 1.1.6 (Caoineag beta 1)
- * Copyright (C) 2006-2008 Dan Fuhry
- *
- * This program is Free Software; you can redistribute and/or modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
- * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for details.
- */
-
-// BarGraph for PHP
-// Source: http://www.phpclasses.org/browse/package/1567.html
-// License: PHP license, see licenses/phplic.html included with this package
-
-class GraphMaker {
- /**
- * GraphMaker::bar_width
- * Width of bars
- */
- var $bar_width = 32;
- /**
- * GraphMaker::bar_height
- * Height of bars
- */
- var $bar_height = 8;
- /**
- * GraphMaker::bar_data
- * Data of all bars
- */
- var $bar_data = array('a' => 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<div class=\"tblholder\" style=\"width: 100%; clip: rect(0px,auto,auto,0px); overflow: auto;\">\n<table border=\"0\" cellspacing=\"1\" cellpadding=\"4\">\n ";
-
- if ( strlen($this->_GraphTitle) > 0 )
- {
- echo "<tr>\n <th colspan=\"".count($this->_values)."\" class=\"".$this->_TDClassHead."\">".$this->_GraphTitle."</th>\n </tr>\n ";
- }
-
- echo "<tr>\n ";
- $css_class = 'row1';
-
- foreach($this->_values as $value)
- {
- $css_class = ( $css_class == 'row1' ) ? 'row3' : 'row1';
- echo " <td valign=\"bottom\" align=\"center\" class=\"$css_class\">\n ";
- $width = $this->_BarWidth;
- $height = ceil( $value["value"] * $this->_GraphWidth / $maxval );
-
- echo "<div style=\"width: {$width}px; height: {$height}px; background-color: {$this->_BarBackgroundColor}; border: ".$this->_BarBorderWidth."px solid ".$this->_BarBorderColor."\">\n ";
- echo "</div>\n ";
-
- // echo "<img src=\"".$this->_BarImg."\" height=\"$width\" width=\"$height\" ";
- // echo " style=\"border: ".$this->_BarBorderWidth."px solid ".$this->_BarBorderColor."\"";
- // echo ">";
-
- echo "</td>\n ";
- }
- echo "</tr>\n ";
- if ( $this->_ShowCountsMode > 0 )
- {
- $css_class = 'row1';
- echo "<tr>\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 " <td align=\"center\" class=\"$css_class ".$this->_TDClassCount."\">$count</td>\n ";
- }
- echo "</tr>\n";
- }
-
- if ($this->_ShowLabels)
- {
- $css_class = 'row1';
- echo " <tr>\n ";
- foreach($this->_values as $value)
- {
- $css_class = ( $css_class == 'row1' ) ? 'row3' : 'row1';
- echo " <td align=\"center\" class=\"$css_class ".$this->_TDClassLabel."\"";
- echo ">".$value["label"]."</td>\n ";
- }
- echo "</tr>\n";
- }
-
- echo "</table>";
- }
-
- function BarGraphHoriz()
- {
- $maxval = $this->GetMaxVal();
-
- foreach($this->_values as $value)
- {
- $sumval += $value["value"];
- }
-
- $this->SetSortMode($this->_RowSortMode);
-
- echo "<table border=\"0\">";
-
- if ( strlen($this->_GraphTitle) > 0 )
- {
- echo "<tr><td ";
- if ( $this->_ShowCountsMode > 0 )
- {
- echo " colspan=\"2\"";
- }
- echo " class=\"".$this->_TDClassHead."\">".$this->_GraphTitle."</td></tr>";
- }
- foreach($this->_values as $value)
- {
- if ($this->_ShowLabels)
- {
- echo "<tr>";
- echo "<td class=\"".$this->_TDClassLabel."\"";
- if ( $this->_ShowCountsMode > 0 )
- {
- echo " colspan=\"2\"";
- }
- echo ">".$value["label"]."</td></tr>";
- }
- echo "<tr>";
- 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 "<td class=\"".$this->_TDClassCount."\">$count</TD>";
- }
- echo "<td>";
- $height = $this->_BarWidth;
- $width = ceil( $value["value"] * $this->_GraphWidth / $maxval );
- echo "<div style=\"width: {$width}px; height: {$height}px; background-color: #456798; border: ".$this->_BarBorderWidth."px solid ".$this->_BarBorderColor."\">\n ";
- echo "</div>\n ";
- //echo "<img SRC=\"".$this->_BarImg."\" height=$height width=$width ";
- //echo " style=\"border: ".$this->_BarBorderWidth."px solid ".$this->_BarBorderColor."\"";
- //echo ">";
- echo "</td></tr>";
- }
- echo "</table>";
- }
- /**
- * 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;
- }
-}
-
-