Source for file Graph.class.php
Documentation is available at Graph.class.php
* This work is hereby released into the Public Domain.
* To view a copy of the public domain dedication,
* visit http://creativecommons.org/licenses/publicdomain/ or send a letter to
* Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
require_once dirname(__FILE__ ). "/Image.class.php";
define("GRAPH_DRAW_RETURN", 1);
define("GRAPH_DRAW_DISPLAY", 2);
* @package linea21.externals
var $components = array();
* Some labels to add to the component
* Time file cache location
* Drawing mode to return the graph
* Drawing mode to display the graph
* @param int $width Graph width
* @param int $height Graph height
* @param string $name Graph name for the cache (must be unique). Let it null to not use the cache.
* @param int $timeout Cache timeout (unix timestamp)
function awGraph($width = NULL, $height = NULL, $name = NULL, $timeout = 0) {
// Clean sometimes all the cache
// Take the graph from the cache if possible
if($this->name !== NULL) {
$this->fileCacheTime = $this->fileCache. "-time";
$type = awGraph::cleanGraphCache($this->fileCacheTime);
header("Content-Type: image/". $type);
* Delete a graph from the cache
* @param string $name Graph name
* @return bool TRUE on success, FALSE on failure
* Delete all graphs from the cache
if($file !== '.' and $file != '..') {
foreach($glob as $file) {
$type = awGraph::cleanGraphCache($file);
* Enable/Disable Graph timing
$this->timing = (bool) $timing;
* Add a component to the graph
function add(&$component) {
$this->components[] = $component;
* Add a label to the component
* @param int $x Position on X axis of the center of the text
* @param int $y Position on Y axis of the center of the text
* Add a label to the component with absolute position
* @param $point Text position
* Build the graph and draw component on it
* @param string $mode Display mode (can be a file name)
function draw($mode = GRAPH_DRAW_DISPLAY) {
foreach($this->components as $component) {
// Put the graph in the cache if needed
foreach($this->labels as $array) {
if(count($array) === 3) {
// Text in relative position
list ($label, $x, $y) = $array;
// Text in absolute position
list ($label, $point) = $array;
$label->draw($driver, $point);
$this->title->draw($driver, $point);
function drawTiming($time) {
$label->set("(". sprintf("%.3f", $time). " s)");
$label->setPadding(1, 0, 0, 0);
$label->setBackgroundColor(new awColor(230, 230, 230, 25));
$label->draw($driver, new awPoint(5, $driver->imageHeight - 5));
function cleanGraphCache($file) {
if($time !== 0 and $time < time()) {
* To preserve PHP 4 compatibility
return (float) $usec + (float) $sec;
|