PMCORE-3841

This commit is contained in:
Julio Cesar Laura Avendaño
2022-05-25 15:50:54 +00:00
committed by Mauricio Veliz
parent 0c079ebb7e
commit ff4ed98f63
29 changed files with 1 additions and 3616 deletions

View File

@@ -132,5 +132,6 @@ workflow/engine/xmlform/users/users_Options.xml
workflow/public_html/skins/JSForms.js
workflow/public_html/skins/ajax.js
thirdparty/geshi
thirdparty/libchart
thirdparty/lime
thirdparty/tcpdf

File diff suppressed because it is too large Load Diff

View File

@@ -1,41 +0,0 @@
Libchart ChangeLog
==================
(C) 2005-2007 Jean-Marc Tr<54>meaux
VERSION 1.2: (2007-08-13)
==========
LICENSE:
* Change of license to GPL v3
FEATURES:
* Multiple line charts
* Multiple vertical and horizontal bar charts
* Customizable layout (plot)
REFACTORING:
* Support for PHP4 is deprecated, as PHP 4 has reached its end of life.
* Use of PHP5 OO constructs
* Use of <?php tags for better server compatibility
* Better separation of data and presentation objects, introduction of dataset objects
VERSION 1.1: (2006-04-02)
==========
CHANGES:
* Added Line Charts
* Bar Chart: default lower bound set to value 0 (seems more intuitive).
Use $chart->setLowerBound(null) if you want to revert to the old behaviour.
BUGFIXES:
* Removed undefined IMG_ARC_FILL constant
* Added missing default parameter in HorizontalChart::render()
* Fixed decimal values in Bar Charts
* Typo in default logo
* Crashed when no point was defined
* Crashed when all values were set to 0
Version 1.0: (2005-09-30)
==========
INITIAL RELEASE

View File

@@ -1,46 +0,0 @@
Libchart - Simple PHP chart drawing library
=============================================
Libchart is a free chart creation PHP library, that is easy to use.
--------------------------------------------------------------------------------
Features
==========
* Bar charts (horizontal or vertical).
* Pie charts.
* Compatibility with PHP 5.
--------------------------------------------------------------------------------
Dependencies
==============
* PHP 5, compiled with:
* GD 2+
* FreeType 2+
--------------------------------------------------------------------------------
Installation
==============
In order to use Libchart, unpack the archive in you project directory and
include libchart.php. Please have a look at the demo files for more information.
You need to chmod 777 the "generated" directory in order to generate the demos.
There is also a tutorial available at the project homepage.
--------------------------------------------------------------------------------
Contact info
==============
WWW: http://naku.dohcrew.com/libchart/
MAIL: jm.tremeaux at gmail dot com

View File

@@ -1,42 +0,0 @@
<?php
/* Libchart - PHP chart library
* Copyright (C) 2005-2007 Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 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 more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
require_once 'model/Point.php';
require_once 'model/DataSet.php';
require_once 'model/XYDataSet.php';
require_once 'model/XYSeriesDataSet.php';
require_once 'view/primitive/Padding.php';
require_once 'view/primitive/Rectangle.php';
require_once 'view/primitive/Primitive.php';
require_once 'view/text/Text.php';
require_once 'view/color/Color.php';
require_once 'view/color/ColorSet.php';
require_once 'view/color/Palette.php';
require_once 'view/axis/Bound.php';
require_once 'view/axis/Axis.php';
require_once 'view/plot/Plot.php';
require_once 'view/caption/Caption.php';
require_once 'view/chart/Chart.php';
require_once 'view/chart/BarChart.php';
require_once 'view/chart/VerticalBarChart.php';
require_once 'view/chart/HorizontalBarChart.php';
require_once 'view/chart/LineChart.php';
require_once 'view/chart/PieChart.php';
?>

View File

@@ -1,28 +0,0 @@
<?php
/* Libchart - PHP chart library
* Copyright (C) 2005-2007 Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 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 more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/**
* Superclass of all data sets.
*
* @author Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
* Created on 10 may 2007
*/
abstract class DataSet {
}
?>

View File

@@ -1,59 +0,0 @@
<?php
/* Libchart - PHP chart library
* Copyright (C) 2005-2007 Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 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 more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/**
* Point of coordinates (X,Y).
* The value of X isn't really of interest, but X is used as a label to display on the horizontal axis.
*
* @author Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
*/
class Point {
private $x;
private $y;
/**
* Creates a new sampling point of coordinates (x, y)
*
* @param integer x coordinate (label)
* @param integer y coordinate (value)
*/
public function Point($x, $y) {
$this->x = $x;
$this->y = $y;
}
/**
* Gets the x coordinate (label).
*
* @return integer x coordinate (label)
*/
public function getX() {
return $this->x;
}
/**
* Gets the y coordinate (value).
*
* @return integer y coordinate (value)
*/
public function getY() {
return $this->y;
}
}
?>

View File

@@ -1,56 +0,0 @@
<?php
/* Libchart - PHP chart library
* Copyright (C) 2005-2007 Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 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 more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/**
* Set of data in the form of (x, y) items.
*
* @author Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
* Created on 10 may 2007
*/
class XYDataSet extends DataSet {
private $pointList;
/**
* Constructor of XYDataSet.
*
*/
public function XYDataSet() {
$this->pointList = array();
}
/**
* Add a new point to the dataset.
*
* @param Point Point to add to the dataset
*/
public function addPoint($point) {
array_push($this->pointList, $point);
}
/**
* Getter of pointList.
*
* @return List of points.
*/
public function getPointList() {
return $this->pointList;
}
}
?>

View File

@@ -1,76 +0,0 @@
<?php
/* Libchart - PHP chart library
* Copyright (C) 2005-2007 Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 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 more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/**
* This dataset comprises several series of points and is used to plot multiple lines charts.
* Each serie is a XYDataSet.
*
* @author Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
* Created on 20 july 2007
*/
class XYSeriesDataSet extends DataSet {
/**
* List of titles
*/
private $titleList;
/**
* List of XYDataSet.
*/
private $serieList;
/**
* Constructor of XYSeriesDataSet.
*
*/
public function XYSeriesDataSet() {
$this->titleList = array();
$this->serieList = array();
}
/**
* Add a new serie to the dataset.
*
* @param string Title (label) of the serie.
* @param XYDataSet Serie of points to add
*/
public function addSerie($title, $serie) {
array_push($this->titleList, $title);
array_push($this->serieList, $serie);
}
/**
* Getter of titleList.
*
* @return List of titles.
*/
public function getTitleList() {
return $this->titleList;
}
/**
* Getter of serieList.
*
* @return List of series.
*/
public function getSerieList() {
return $this->serieList;
}
}
?>

View File

@@ -1,130 +0,0 @@
<?php
/* Libchart - PHP chart library
* Copyright (C) 2005-2007 Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 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 more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/**
* Automatic axis boundaries and ticks calibration
*
* @author Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
*/
class Axis {
private $min;
private $max;
private $guide;
private $delta;
private $magnitude;
private $displayMin;
private $displayMax;
private $tics;
/**
* Creates a new axis formatter.
*
* @param integer minimum value on the axis
* @param integer maximum value on the axis
*/
public function Axis($min, $max) {
$this->min = $min;
$this->max = $max;
$this->guide = 10;
}
/**
* Computes value between two ticks.
*/
public function quantizeTics() {
// Approximate number of decades, in [1..10[
$norm = $this->delta / $this->magnitude;
// Approximate number of tics per decade
$posns = $this->guide / $norm;
if ($posns > 20) {
$tics = 0.05; // e.g. 0, .05, .10, ...
} else if ($posns > 10) {
$tics = 0.2; // e.g. 0, .1, .2, ...
} else if ($posns > 5) {
$tics = 0.4; // e.g. 0, 0.2, 0.4, ...
} else if ($posns > 3) {
$tics = 0.5; // e.g. 0, 0.5, 1, ...
} else if ($posns > 2) {
$tics = 1; // e.g. 0, 1, 2, ...
} else if ($posns > 0.25) {
$tics = 2; // e.g. 0, 2, 4, 6
} else {
$tics = ceil($norm);
}
$this->tics = $tics * $this->magnitude;
}
/**
* Computes automatic boundaries on the axis
*/
public function computeBoundaries() {
// Range
$this->delta = abs($this->max - $this->min);
// Check for null distribution
if ($this->delta == 0)
$this->delta = 1;
// Order of magnitude of range
$this->magnitude = pow(10, floor(log10($this->delta)));
$this->quantizeTics();
$this->displayMin = floor($this->min / $this->tics) * $this->tics;
$this->displayMax = ceil($this->max / $this->tics) * $this->tics;
$this->displayDelta = $this->displayMax - $this->displayMin;
// Check for null distribution
if ($this->displayDelta == 0) {
$this->displayDelta = 1;
}
}
/**
* Get the lower boundary on the axis3
*
* @return integer lower boundary on the axis
*/
public function getLowerBoundary() {
return $this->displayMin;
}
/**
* Get the upper boundary on the axis3
*
* @return integer upper boundary on the axis
*/
public function getUpperBoundary() {
return $this->displayMax;
}
/**
* Get the value between two ticks3
*
* @return integer value between two ticks
*/
public function getTics() {
return $this->tics;
}
}
?>

View File

@@ -1,146 +0,0 @@
<?php
/* Libchart - PHP chart library
* Copyright (C) 2005-2007 Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 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 more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/**
* Object representing the bounds of a dataset (its minimal and maximal values) on its vertical axis.
* The bounds are automatically calculated from a XYDataSet or XYSeriesDataSet.
* Default (calculated) bounds can be overriden using the setLowerBound() and setUpperBound() methods.
*
* @author Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
* Created on 25 july 2007
*/
class Bound {
/**
* Manually set lower bound, overrides the value calculated by computeBound().
*/
private $lowerBound = null;
/**
* Manually set upper bound, overrides the value calculated by computeBound().
*/
private $upperBound = null;
/**
* Computed min bound.
*/
private $yMinValue = null;
/**
* Computed max bound.
*/
private $yMaxValue = null;
/**
* Compute the boundaries on the axis.
*
* @param dataSet The data set
*/
public function computeBound($dataSet) {
// Check if the data set is empty
$dataSetEmpty = true;
$serieList = null;
if ($dataSet instanceof XYDataSet) {
$pointList = $dataSet->getPointList();
$dataSetEmpty = count($pointList) == 0;
if (!$dataSetEmpty) {
// Process it as a serie
$serieList = array();
array_push($serieList, $dataSet);
}
} else if ($dataSet instanceof XYSeriesDataSet) {
$serieList = $dataSet->getSerieList();
if (count($serieList) > 0) {
$serie = current($serieList);
$dataSetEmpty = count($serie) == 0;
}
} else {
die("Error: unknown dataset type");
}
// If the dataset is empty, default some bounds
$yMin = 0;
$yMax = 1;
if (!$dataSetEmpty) {
// Compute lower and upper bound on the value axis
unset($yMin);
unset($yMax);
foreach ($serieList as $serie) {
foreach ($serie->getPointList() as $point) {
$y = $point->getY();
if (!isset($yMin)) {
$yMin = $y;
$yMax = $y;
} else {
if ($y < $yMin) {
$yMin = $y;
}
if ($y > $yMax) {
$yMax = $y;
}
}
}
}
}
$this->yMinValue = isset($this->lowerBound) ? $this->lowerBound : $yMin;
$this->yMaxValue = isset($this->upperBound) ? $this->upperBound : $yMax;
}
/**
* Getter of yMinValue.
*
* @return min bound
*/
public function getYMinValue() {
return $this->yMinValue;
}
/**
* Getter of yMaxValue.
*
* @return max bound
*/
public function getYMaxValue() {
return $this->yMaxValue;
}
/**
* Set manually the lower boundary value (overrides the automatic formatting).
* Typical usage is to set the bars starting from zero.
*
* @param double lower boundary value
*/
public function setLowerBound($lowerBound) {
$this->lowerBound = $lowerBound;
}
/**
* Set manually the upper boundary value (overrides the automatic formatting).
*
* @param double upper boundary value
*/
public function setUpperBound($upperBound) {
$this->upperBound = $upperBound;
}
}
?>

View File

@@ -1,112 +0,0 @@
<?php
/* Libchart - PHP chart library
* Copyright (C) 2005-2007 Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 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 more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/**
* Caption.
*
* @author Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
* Created on 30 july 2007
*/
class Caption {
protected $labelBoxWidth;
protected $labelBoxHeight;
// Plot
protected $plot;
// Label list
protected $labelList;
// Color set
protected $colorSet;
/**
* Constructor of Caption
*/
public function Caption() {
$this->labelBoxWidth = 15;
$this->labelBoxHeight = 15;
}
/**
* Render the caption.
*/
public function render() {
// Get graphical obects
$img = $this->plot->getImg();
$palette = $this->plot->getPalette();
$text = $this->plot->getText();
$primitive = $this->plot->getPrimitive();
// Get the caption area
$captionArea = $this->plot->getCaptionArea();
// Get the pie color set
$colorSet = $this->colorSet;
$colorSet->reset();
$i = 0;
foreach ($this->labelList as $label) {
// Get the next color
$color = $colorSet->currentColor();
$colorSet->next();
$boxX1 = $captionArea->x1;
$boxX2 = $boxX1 + $this->labelBoxWidth;
$boxY1 = $captionArea->y1 + 5 + $i * ($this->labelBoxHeight + 5);
$boxY2 = $boxY1 + $this->labelBoxHeight;
$primitive->outlinedBox($boxX1, $boxY1, $boxX2, $boxY2, $palette->axisColor[0], $palette->axisColor[1]);
imagefilledrectangle($img, $boxX1 + 2, $boxY1 + 2, $boxX2 - 2, $boxY2 - 2, $color->getColor($img));
$text->printText($img, $boxX2 + 5, $boxY1 + $this->labelBoxHeight / 2, $this->plot->getTextColor(), $label, $text->fontCondensed, $text->VERTICAL_CENTER_ALIGN);
$i++;
}
}
/**
* Sets the plot.
*
* @param Plot The plot
*/
public function setPlot($plot) {
$this->plot = $plot;
}
/**
* Sets the label list.
*
* @param Array label list
*/
public function setLabelList($labelList) {
$this->labelList = $labelList;
}
/**
* Sets the color set.
*
* @param Array Color set
*/
public function setColorSet($colorSet) {
$this->colorSet = $colorSet;
}
}
?>

View File

@@ -1,174 +0,0 @@
<?php
/* Libchart - PHP chart library
* Copyright (C) 2005-2007 Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 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 more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/**
* Base abstract class for rendering both horizontal and vertical bar charts.
*
* @author Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
*/
abstract class BarChart extends Chart {
protected $bound;
protected $axis;
protected $hasSeveralSerie;
/**
* Creates a new bar chart.
*
* @param integer width of the image
* @param integer height of the image
*/
protected function BarChart($width, $height) {
parent::Chart($width, $height);
// Initialize the bounds
$this->bound = new Bound();
$this->bound->setLowerBound(0);
}
/**
* Compute the axis.
*/
protected function computeAxis() {
$this->axis = new Axis($this->bound->getYMinValue(), $this->bound->getYMaxValue());
$this->axis->computeBoundaries();
}
/**
* Create the image.
*/
protected function createImage() {
parent::createImage();
// Get graphical obects
$img = $this->plot->getImg();
$palette = $this->plot->getPalette();
$text = $this->plot->getText();
$primitive = $this->plot->getPrimitive();
// Get the graph area
$graphArea = $this->plot->getGraphArea();
// Aqua-like background
for ($i = $graphArea->y1; $i < $graphArea->y2; $i++) {
$color = $palette->aquaColor[($i + 3) % 4];
$primitive->line($graphArea->x1, $i, $graphArea->x2, $i, $color);
}
// Axis
imagerectangle($img, $graphArea->x1 - 1, $graphArea->y1, $graphArea->x1, $graphArea->y2, $palette->axisColor[0]->getColor($img));
imagerectangle($img, $graphArea->x1 - 1, $graphArea->y2, $graphArea->x2, $graphArea->y2 + 1, $palette->axisColor[0]->getColor($img));
}
/**
* Returns true if the data set has some data.
* @param minNumberOfPoint Minimum number of points (1 for bars, 2 for lines).
*
* @return true if data set empty
*/
protected function isEmptyDataSet($minNumberOfPoint) {
if ($this->dataSet instanceof XYDataSet) {
$pointList = $this->dataSet->getPointList();
$pointCount = count($pointList);
return $pointCount < $minNumberOfPoint;
} else if ($this->dataSet instanceof XYSeriesDataSet) {
$serieList = $this->dataSet->getSerieList();
reset($serieList);
if (count($serieList) > 0) {
$serie = current($serieList);
$pointList = $serie->getPointList();
$pointCount = count($pointList);
return $pointCount < $minNumberOfPoint;
}
} else {
die("Error: unknown dataset type");
}
}
/**
* Checks the data model before rendering the graph.
*/
protected function checkDataModel() {
// Check if a dataset was defined
if (!$this->dataSet) {
die("Error: No dataset defined.");
}
// Bar charts accept both XYDataSet and XYSeriesDataSet
if ($this->dataSet instanceof XYDataSet) {
// The dataset contains only one serie
$this->hasSeveralSerie = false;
} else if ($this->dataSet instanceof XYSeriesDataSet) {
// Check if each series has the same number of points
unset($lastPointCount);
$serieList = $this->dataSet->getSerieList();
for ($i = 0; $i < count($serieList); $i++) {
$serie = $serieList[$i];
$pointCount = count($serie->getPointList());
if (isset($lastPointCount) && $pointCount != $lastPointCount) {
die("Error: serie <" . $i . "> doesn't have the same number of points as last serie (last one: <" . $lastPointCount. ">, this one: <" . $pointCount. ">).");
}
$lastPointCount = $pointCount;
}
// The dataset contains several series
$this->hasSeveralSerie = true;
} else {
die("Error: Bar chart accept only XYDataSet and XYSeriesDataSet");
}
}
/**
* Return the data as a series list (for consistency).
*
* @return List of series
*/
protected function getDataAsSerieList() {
// Get the data as a series list
$serieList = null;
if ($this->dataSet instanceof XYSeriesDataSet) {
$serieList = $this->dataSet->getSerieList();
} else if ($this->dataSet instanceof XYDataSet) {
$serieList = array();
array_push($serieList, $this->dataSet);
}
return $serieList;
}
/**
* Return the first serie of the list, or the dataSet itself if there is no serie.
*
* @return XYDataSet
*/
protected function getFirstSerieOfList() {
$pointList = null;
if ($this->dataSet instanceof XYSeriesDataSet) {
// For a series dataset, print the legend from the first serie
$serieList = $this->dataSet->getSerieList();
reset($serieList);
$serie = current($serieList);
$pointList = $serie->getPointList();
} else if ($this->dataSet instanceof XYDataSet) {
$pointList = $this->dataSet->getPointList();
}
return $pointList;
}
}
?>

View File

@@ -1,102 +0,0 @@
<?php
/* Libchart - PHP chart library
* Copyright (C) 2005-2007 Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 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 more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/*! \mainpage Libchart
*
* This is the reference API, automatically compiled by <a href="http://www.stack.nl/~dimitri/doxygen/">Doxygen</a>.
* You can find here information that is not covered by the <a href="../samplecode/">tutorial</a>.
*
*/
/**
* Base chart class.
*
* @author Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
*/
abstract class Chart {
/**
* The data set.
*/
protected $dataSet;
/**
* Plot (holds graphical attributes).
*/
protected $plot;
/**
* Abstract constructor of Chart.
*
* @param integer width of the image
* @param integer height of the image
*/
protected function Chart($width, $height) {
// Creates the plot
$this->plot = new Plot($width, $height);
$this->plot->setTitle("Untitled chart");
$this->plot->setLogoFileName(dirname(__FILE__) . "/../../../images/PoweredBy.png");
}
/**
* Checks the data model before rendering the graph.
*/
protected function checkDataModel() {
// Check if a dataset was defined
if (!$this->dataSet) {
die("Error: No dataset defined.");
}
// Maybe no points are defined, but that's ok. This will yield and empty graph with default boundaries.
}
/**
* Create the image.
*/
protected function createImage() {
$this->plot->createImage();
}
/**
* Sets the data set.
*
* @param DataSet The data set
*/
public function setDataSet($dataSet) {
$this->dataSet = $dataSet;
}
/**
* Return the plot.
*
* @return plot
*/
public function getPlot() {
return $this->plot;
}
/**
* Sets the title.
*
* @param string New title
*/
public function setTitle($title) {
$this->plot->setTitle($title);
}
}
?>

View File

@@ -1,213 +0,0 @@
<?php
/* Libchart - PHP chart library
* Copyright (C) 2005-2007 Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 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 more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/**
* Horizontal bar chart
*
* @author Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
*/
class HorizontalBarChart extends BarChart {
/**
* Ratio of empty space beside the bars.
*/
private $emptyToFullRatio;
/**
* Creates a new horizontal bar chart.
*
* @param integer width of the image
* @param integer height of the image
*/
public function HorizontalBarChart($width = 600, $height = 250) {
parent::BarChart($width, $height);
$this->emptyToFullRatio = 1 / 5;
//$this->plot->setGraphPadding(new Padding(5, 30, 30, 50));
$this->plot->setGraphPadding(new Padding(-20, 5, 30, 60));
}
/**
* Computes the layout.
*/
protected function computeLayout() {
if ($this->hasSeveralSerie) {
$this->plot->setHasCaption(true);
}
$this->plot->computeLayout();
}
/**
* Print the axis.
*/
protected function printAxis() {
$minValue = $this->axis->getLowerBoundary();
$maxValue = $this->axis->getUpperBoundary();
$stepValue = $this->axis->getTics();
// Get graphical obects
$img = $this->plot->getImg();
$palette = $this->plot->getPalette();
$text = $this->plot->getText();
// Get the graph area
$graphArea = $this->plot->getGraphArea();
// Horizontal axis
for ($value = $minValue; $value <= $maxValue; $value += $stepValue) {
$x = $graphArea->x1 + ($value - $minValue) * ($graphArea->x2 - $graphArea->x1) / ($this->axis->displayDelta);
imagerectangle($img, $x - 1, $graphArea->y2 + 2, $x, $graphArea->y2 + 3, $palette->axisColor[0]->getColor($img));
imagerectangle($img, $x - 1, $graphArea->y2, $x, $graphArea->y2 + 1, $palette->axisColor[1]->getColor($img));
$text->printText($img, $x, $graphArea->y2 + 5, $this->plot->getTextColor(), $value, $text->fontCondensed, $text->HORIZONTAL_CENTER_ALIGN);
}
// Get first serie of a list
$pointList = $this->getFirstSerieOfList();
// Vertical Axis
$pointCount = count($pointList);
reset($pointList);
$rowHeight = ($graphArea->y2 - $graphArea->y1) / $pointCount;
reset($pointList);
for ($i = 0; $i <= $pointCount; $i++) {
$y = $graphArea->y2 - $i * $rowHeight;
imagerectangle($img, $graphArea->x1 - 3, $y, $graphArea->x1 - 2, $y + 1, $palette->axisColor[0]->getColor($img));
imagerectangle($img, $graphArea->x1 - 1, $y, $graphArea->x1, $y + 1, $palette->axisColor[1]->getColor($img));
if ($i < $pointCount) {
$point = current($pointList);
next($pointList);
$label = $point->getX();
$text->printText($img, $graphArea->x1 - 5, $y - $rowHeight / 2, $this->plot->getTextColor(), $label, $text->fontCondensed, $text->HORIZONTAL_RIGHT_ALIGN | $text->VERTICAL_CENTER_ALIGN);
}
}
}
/**
* Print the bars.
*/
protected function printBar() {
// Get the data as a list of series for consistency
$serieList = $this->getDataAsSerieList();
// Get graphical obects
$img = $this->plot->getImg();
$palette = $this->plot->getPalette();
$text = $this->plot->getText();
// Get the graph area
$graphArea = $this->plot->getGraphArea();
$minValue = $this->axis->getLowerBoundary();
$maxValue = $this->axis->getUpperBoundary();
$stepValue = $this->axis->getTics();
$barColorSet = $palette->barColorSet;
$barColorSet->reset();
$serieCount = count($serieList);
for ($j = 0; $j < $serieCount; $j++) {
$serie = $serieList[$j];
$pointList = $serie->getPointList();
$pointCount = count($pointList);
reset($pointList);
// Get the next color
$color = $barColorSet->currentColor();
$shadowColor = $barColorSet->currentShadowColor();
$barColorSet->next();
$rowHeight = ($graphArea->y2 - $graphArea->y1) / $pointCount;
for ($i = 0; $i < $pointCount; $i++) {
$y = $graphArea->y2 - $i * $rowHeight;
$point = current($pointList);
next($pointList);
$value = $point->getY();
$xmax = $graphArea->x1 + ($value - $minValue) * ($graphArea->x2 - $graphArea->x1) / ($this->axis->displayDelta);
// Bar dimensions
$yWithMargin = $y - $rowHeight * $this->emptyToFullRatio;
$rowWidthWithMargin = $rowHeight * (1 - $this->emptyToFullRatio * 2);
$barWidth = $rowWidthWithMargin / $serieCount;
$barOffset = $barWidth * $j;
$y1 = $yWithMargin - $barWidth - $barOffset;
$y2 = $yWithMargin - $barOffset - 1;
// Text
$text->printText($img, $xmax + 5, $y2 - $barWidth / 2, $this->plot->getTextColor(), $value, $text->fontCondensed, $text->VERTICAL_CENTER_ALIGN);
imagefilledrectangle($img, $graphArea->x1 + 1, $y1, $xmax, $y2, $shadowColor->getColor($img));
imagefilledrectangle($img, $graphArea->x1 + 2, $y1 + 1, $xmax - 4, $y2, $color->getColor($img));
}
}
}
/**
* Renders the caption.
*/
protected function printCaption() {
// Get the list of labels
$labelList = $this->dataSet->getTitleList();
// Create the caption
$caption = new Caption();
$caption->setPlot($this->plot);
$caption->setLabelList($labelList);
$palette = $this->plot->getPalette();
$barColorSet = $palette->barColorSet;
$caption->setColorSet($barColorSet);
// Render the caption
$caption->render();
}
/**
* Render the chart image.
*
* @param string name of the file to render the image to (optional)
*/
public function render($fileName = null) {
// Check the data model
$this->checkDataModel();
$this->bound->computeBound($this->dataSet);
$this->computeAxis();
$this->computeLayout();
$this->createImage();
//$this->plot->printLogo();
if (!$this->isEmptyDataSet(1)) {
$this->printAxis();
$this->printBar();
if ($this->hasSeveralSerie) {
$this->printCaption();
}
}
$this->plot->render($fileName);
}
}
?>

View File

@@ -1,201 +0,0 @@
<?php
/* Libchart - PHP chart library
* Copyright (C) 2005-2007 Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 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 more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/**
* Line chart.
*
* @author Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
*/
class LineChart extends BarChart {
/**
* Creates a new line chart.
* Line charts allow for XYDataSet and XYSeriesDataSet in order to plot several lines.
*
* @param integer width of the image
* @param integer height of the image
*/
public function LineChart($width = 600, $height = 250) {
parent::BarChart($width, $height);
//$this->plot->setGraphPadding(new Padding(5, 30, 50, 50));
$this->plot->setGraphPadding(new Padding(-10, 5, 50, 40));
}
/**
* Computes the layout.
*/
protected function computeLayout() {
if ($this->hasSeveralSerie) {
$this->plot->setHasCaption(true);
}
$this->plot->computeLayout();
}
/**
* Print the axis.
*/
protected function printAxis() {
$minValue = $this->axis->getLowerBoundary();
$maxValue = $this->axis->getUpperBoundary();
$stepValue = $this->axis->getTics();
// Get graphical obects
$img = $this->plot->getImg();
$palette = $this->plot->getPalette();
$text = $this->plot->getText();
// Get the graph area
$graphArea = $this->plot->getGraphArea();
// Vertical axis
for ($value = $minValue; $value <= $maxValue; $value += $stepValue) {
$y = $graphArea->y2 - ($value - $minValue) * ($graphArea->y2 - $graphArea->y1) / ($this->axis->displayDelta);
imagerectangle($img, $graphArea->x1 - 3, $y, $graphArea->x1 - 2, $y + 1, $palette->axisColor[0]->getColor($img));
imagerectangle($img, $graphArea->x1 - 1, $y, $graphArea->x1, $y + 1, $palette->axisColor[1]->getColor($img));
$text->printText($img, $graphArea->x1 - 5, $y, $this->plot->getTextColor(), $value, $text->fontCondensed, $text->HORIZONTAL_RIGHT_ALIGN | $text->VERTICAL_CENTER_ALIGN);
}
// Get first serie of a list
$pointList = $this->getFirstSerieOfList();
// Horizontal Axis
$pointCount = count($pointList);
reset($pointList);
$columnWidth = ($graphArea->x2 - $graphArea->x1) / ($pointCount - 1);
for ($i = 0; $i < $pointCount; $i++) {
$x = $graphArea->x1 + $i * $columnWidth;
imagerectangle($img, $x - 1, $graphArea->y2 + 2, $x, $graphArea->y2 + 3, $palette->axisColor[0]->getColor($img));
imagerectangle($img, $x - 1, $graphArea->y2, $x, $graphArea->y2 + 1, $palette->axisColor[1]->getColor($img));
$point = current($pointList);
next($pointList);
$label = $point->getX();
$text->printDiagonal($img, $x - 5, $graphArea->y2 + 10, $this->plot->getTextColor(), $label);
}
}
/**
* Print the lines.
*/
protected function printLine() {
$minValue = $this->axis->getLowerBoundary();
$maxValue = $this->axis->getUpperBoundary();
// Get the data as a list of series for consistency
$serieList = $this->getDataAsSerieList();
// Get graphical obects
$img = $this->plot->getImg();
$palette = $this->plot->getPalette();
$text = $this->plot->getText();
$primitive = $this->plot->getPrimitive();
// Get the graph area
$graphArea = $this->plot->getGraphArea();
$lineColorSet = $palette->lineColorSet;
$lineColorSet->reset();
for ($j = 0; $j < count($serieList); $j++) {
$serie = $serieList[$j];
$pointList = $serie->getPointList();
$pointCount = count($pointList);
reset($pointList);
$columnWidth = ($graphArea->x2 - $graphArea->x1) / ($pointCount - 1);
$lineColor = $lineColorSet->currentColor();
$lineColorShadow = $lineColorSet->currentShadowColor();
$lineColorSet->next();
$x1 = null;
$y1 = null;
for ($i = 0; $i < $pointCount; $i++) {
$x2 = $graphArea->x1 + $i * $columnWidth;
$point = current($pointList);
next($pointList);
$value = $point->getY();
$y2 = $graphArea->y2 - ($value - $minValue) * ($graphArea->y2 - $graphArea->y1) / ($this->axis->displayDelta);
// Draw line
if ($x1) {
$primitive->line($x1, $y1, $x2, $y2, $lineColor, 4);
$primitive->line($x1, $y1 - 1, $x2, $y2 - 1, $lineColorShadow, 2);
}
$x1 = $x2;
$y1 = $y2;
}
}
}
/**
* Renders the caption.
*/
protected function printCaption() {
// Get the list of labels
$labelList = $this->dataSet->getTitleList();
// Create the caption
$caption = new Caption();
$caption->setPlot($this->plot);
$caption->setLabelList($labelList);
$palette = $this->plot->getPalette();
$lineColorSet = $palette->lineColorSet;
$caption->setColorSet($lineColorSet);
// Render the caption
$caption->render();
}
/**
* Render the chart image.
*
* @param string name of the file to render the image to (optional)
*/
public function render($fileName = null) {
// Check the data model
$this->checkDataModel();
$this->bound->computeBound($this->dataSet);
$this->computeAxis();
$this->computeLayout();
$this->createImage();
//$this->plot->printLogo();
//$this->plot->printTitle();
if (!$this->isEmptyDataSet(2)) {
$this->printAxis();
$this->printLine();
if ($this->hasSeveralSerie) {
$this->printCaption();
}
}
$this->plot->render($fileName);
}
}
?>

View File

@@ -1,253 +0,0 @@
<?php
/* Libchart - PHP chart library
* Copyright (C) 2005-2007 Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 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 more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/**
* Pie chart.
*
* @author Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
*/
class PieChart extends Chart {
protected $pieCenterX;
protected $pieCenterY;
/**
* Constructor of a pie chart.
*
* @param integer width of the image
* @param integer height of the image
*/
public function PieChart($width = 600, $height = 250) {
parent::Chart($width, $height);
$this->plot->setGraphPadding(new Padding( -30, 1, 1, 1 ));
}
/**
* Computes the layout.
*/
protected function computeLayout() {
$this->plot->setHasCaption(true);
$this->plot->computeLayout();
// Get the graph area
$graphArea = $this->plot->getGraphArea();
// Compute the coordinates of the pie
$this->pieCenterX = $graphArea->x1 + ($graphArea->x2 - $graphArea->x1) / 2;
$this->pieCenterY = $graphArea->y1 + ($graphArea->y2 - $graphArea->y1) / 2;
$this->pieWidth = round(($graphArea->x2 - $graphArea->x1) * 4 / 5);
$this->pieHeight = round(($graphArea->y2 - $graphArea->y1) * 3.7 / 5);
$this->pieDepth = round($this->pieWidth * 0.05);
}
/**
* Compare two sampling point values, order from biggest to lowest value.
*
* @param double first value
* @param double second value
* @return integer result of the comparison
*/
protected function sortPie($v1, $v2) {
return $v1[0] == $v2[0] ? 0 :
$v1[0] > $v2[0] ? -1 :
1;
}
/**
* Compute pie values in percentage and sort them.
*/
protected function computePercent() {
$this->total = 0;
$this->percent = array();
$pointList = $this->dataSet->getPointList();
foreach ($pointList as $point) {
$this->total += $point->getY();
}
foreach ($pointList as $point) {
$percent = $this->total == 0 ? 0 : 100 * $point->getY() / $this->total;
array_push($this->percent, array($percent, $point));
}
usort($this->percent, array("PieChart", "sortPie"));
}
/**
* Creates the pie chart image.
*/
protected function createImage() {
parent::createImage();
// Get graphical obects
$img = $this->plot->getImg();
$palette = $this->plot->getPalette();
$primitive = $this->plot->getPrimitive();
// Get the graph area
$graphArea = $this->plot->getGraphArea();
// Legend box
$primitive->outlinedBox($graphArea->x1, $graphArea->y1, $graphArea->x2, $graphArea->y2, $palette->axisColor[0], $palette->axisColor[1]);
// Aqua-like background
for ($i = $graphArea->y1 + 2; $i < $graphArea->y2 - 1; $i++) {
$color = $palette->aquaColor[($i + 3) % 4];
$primitive->line($graphArea->x1 + 2, $i, $graphArea->x2 - 2, $i, $color);
}
}
/**
* Renders the caption.
*/
protected function printCaption() {
// Create a list of labels
$labelList = array();
foreach($this->percent as $percent) {
list($percent, $point) = $percent;
$label = $point->getX();
array_push($labelList, $label);
}
// Create the caption
$caption = new Caption();
$caption->setPlot($this->plot);
$caption->setLabelList($labelList);
$palette = $this->plot->getPalette();
$pieColorSet = $palette->pieColorSet;
$caption->setColorSet($pieColorSet);
// Render the caption
$caption->render();
}
/**
* Draw a 2D disc.
*
* @param integer center coordinate (y)
* @param array colors for each portion
* @param bitfield drawing mode
*/
protected function drawDisc($cy, $colorArray, $mode) {
// Get graphical obects
$img = $this->plot->getImg();
$i = 0;
$angle1 = 0;
$percentTotal = 0;
foreach ($this->percent as $a) {
list ($percent, $point) = $a;
$color = $colorArray[$i % count($colorArray)];
$percentTotal += $percent;
$angle2 = $percentTotal * 360 / 100;
imagefilledarc($img, $this->pieCenterX, $cy, $this->pieWidth, $this->pieHeight, $angle1, $angle2, $color->getColor($img), $mode);
$angle1 = $angle2;
$i++;
}
}
/**
* Print the percentage text.
*/
protected function drawPercent() {
// Get graphical obects
$img = $this->plot->getImg();
$palette = $this->plot->getPalette();
$text = $this->plot->getText();
$primitive = $this->plot->getPrimitive();
$angle1 = 0;
$percentTotal = 0;
foreach ($this->percent as $a) {
list ($percent, $point) = $a;
// If value is null, don't print percentage
if ($percent <= 0) {
continue;
}
$percentTotal += $percent;
$angle2 = $percentTotal * 2 * M_PI / 100;
$angle = $angle1 + ($angle2 - $angle1) / 2;
$label = number_format($percent) . "%";
$x = cos($angle) * ($this->pieWidth + 35) / 2 + $this->pieCenterX;
$y = sin($angle) * ($this->pieHeight + 35) / 2 + $this->pieCenterY;
$text->printText($img, $x, $y, $this->plot->getTextColor(), $label, $text->fontCondensed, $text->HORIZONTAL_CENTER_ALIGN | $text->VERTICAL_CENTER_ALIGN);
$angle1 = $angle2;
}
}
/**
* Print the pie chart.
*/
protected function printPie() {
// Get graphical obects
$img = $this->plot->getImg();
$palette = $this->plot->getPalette();
$text = $this->plot->getText();
$primitive = $this->plot->getPrimitive();
// Get the pie color set
$pieColorSet = $palette->pieColorSet;
$pieColorSet->reset();
// Silhouette
for ($cy = $this->pieCenterY + $this->pieDepth / 2; $cy >= $this->pieCenterY - $this->pieDepth / 2; $cy--) {
$this->drawDisc($cy, $palette->pieColorSet->shadowColorList, IMG_ARC_EDGED);
}
// Top
$this->drawDisc($this->pieCenterY - $this->pieDepth / 2, $palette->pieColorSet->colorList, IMG_ARC_PIE);
// Top Outline
$this->drawPercent();
}
/**
* Render the chart image.
*
* @param string name of the file to render the image to (optional)
*/
public function render($fileName = null) {
$this->computePercent();
$this->computeLayout();
$this->createImage();
//$this->plot->printLogo();
//$this->plot->printTitle();
$this->printPie();
$this->printCaption();
$this->plot->render($fileName);
}
}
?>

View File

@@ -1,213 +0,0 @@
<?php
/* Libchart - PHP chart library
* Copyright (C) 2005-2007 Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 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 more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/**
* Chart composed of vertical bars.
*
* @author Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
*/
class VerticalBarChart extends BarChart {
/**
* Ratio of empty space beside the bars.
*/
private $emptyToFullRatio;
/**
* Creates a new vertical bar chart
*
* @param integer width of the image
* @param integer height of the image
*/
public function VerticalBarChart($width = 600, $height = 250) {
parent::BarChart($width, $height);
$this->emptyToFullRatio = 1 / 4;
$this->plot->setGraphPadding(new Padding(-10, 5, 70, 45));
}
/**
* Computes the layout.
*/
protected function computeLayout() {
if ($this->hasSeveralSerie) {
$this->plot->setHasCaption(true);
}
$this->plot->computeLayout();
}
/**
* Print the horizontal and veritcal axis.
*/
protected function printAxis() {
$minValue = $this->axis->getLowerBoundary();
$maxValue = $this->axis->getUpperBoundary();
$stepValue = $this->axis->getTics();
// Get graphical obects
$img = $this->plot->getImg();
$palette = $this->plot->getPalette();
$text = $this->plot->getText();
// Get the graph area
$graphArea = $this->plot->getGraphArea();
// Vertical axis
for ($value = $minValue; $value <= $maxValue; $value += $stepValue) {
$y = $graphArea->y2 - ($value - $minValue) * ($graphArea->y2 - $graphArea->y1) / ($this->axis->displayDelta);
imagerectangle($img, $graphArea->x1 - 3, $y, $graphArea->x1 - 2, $y + 1, $palette->axisColor[0]->getColor($img));
imagerectangle($img, $graphArea->x1 - 1, $y, $graphArea->x1, $y + 1, $palette->axisColor[1]->getColor($img));
$text->printText($img, $graphArea->x1 - 5, $y, $this->plot->getTextColor(), $value, $text->fontCondensed, $text->HORIZONTAL_RIGHT_ALIGN | $text->VERTICAL_CENTER_ALIGN);
}
// Get first serie of a list
$pointList = $this->getFirstSerieOfList();
// Horizontal Axis
$pointCount = count($pointList);
reset($pointList);
$columnWidth = ($graphArea->x2 - $graphArea->x1) / $pointCount;
for ($i = 0; $i <= $pointCount; $i++) {
$x = $graphArea->x1 + $i * $columnWidth;
imagerectangle($img, $x - 1, $graphArea->y2 + 2, $x, $graphArea->y2 + 3, $palette->axisColor[0]->getColor($img));
imagerectangle($img, $x - 1, $graphArea->y2, $x, $graphArea->y2 + 1, $palette->axisColor[1]->getColor($img));
if ($i < $pointCount) {
$point = current($pointList);
next($pointList);
$label = $point->getX();
$text->printDiagonal($img, $x + $columnWidth * 1 / 3, $graphArea->y2 + 10, $this->plot->getTextColor(), $label);
}
}
}
/**
* Print the bars.
*/
protected function printBar() {
// Get the data as a list of series for consistency
$serieList = $this->getDataAsSerieList();
// Get graphical obects
$img = $this->plot->getImg();
$palette = $this->plot->getPalette();
$text = $this->plot->getText();
// Get the graph area
$graphArea = $this->plot->getGraphArea();
$barColorSet = $palette->barColorSet;
$barColorSet->reset();
$minValue = $this->axis->getLowerBoundary();
$maxValue = $this->axis->getUpperBoundary();
$stepValue = $this->axis->getTics();
$serieCount = count($serieList);
for ($j = 0; $j < $serieCount; $j++) {
$serie = $serieList[$j];
$pointList = $serie->getPointList();
$pointCount = count($pointList);
reset($pointList);
// Get the next color
$color = $barColorSet->currentColor();
$shadowColor = $barColorSet->currentShadowColor();
$barColorSet->next();
$columnWidth = ($graphArea->x2 - $graphArea->x1) / $pointCount;
for ($i = 0; $i < $pointCount; $i++) {
$x = $graphArea->x1 + $i * $columnWidth;
$point = current($pointList);
next($pointList);
$value = $point->getY();
$ymin = $graphArea->y2 - ($value - $minValue) * ($graphArea->y2 - $graphArea->y1) / ($this->axis->displayDelta);
// Bar dimensions
$xWithMargin = $x + $columnWidth * $this->emptyToFullRatio;
$columnWidthWithMargin = $columnWidth * (1 - $this->emptyToFullRatio * 2);
$barWidth = $columnWidthWithMargin / $serieCount;
$barOffset = $barWidth * $j;
$x1 = $xWithMargin + $barOffset;
$x2 = $xWithMargin + $barWidth + $barOffset - 1;
// Text
$text->printText($img, $x1 + $barWidth / 2 , $ymin - 5, $this->plot->getTextColor(), $value, $text->fontCondensed, $text->HORIZONTAL_CENTER_ALIGN | $text->VERTICAL_BOTTOM_ALIGN);
// Vertical bar
imagefilledrectangle($img, $x1, $ymin, $x2, $graphArea->y2 - 1, $shadowColor->getColor($img));
imagefilledrectangle($img, $x1 + 1, $ymin + 1, $x2 - 4, $graphArea->y2 - 1, $color->getColor($img));
}
}
}
/**
* Renders the caption.
*/
protected function printCaption() {
// Get the list of labels
$labelList = $this->dataSet->getTitleList();
// Create the caption
$caption = new Caption();
$caption->setPlot($this->plot);
$caption->setLabelList($labelList);
$palette = $this->plot->getPalette();
$barColorSet = $palette->barColorSet;
$caption->setColorSet($barColorSet);
// Render the caption
$caption->render();
}
/**
* Render the chart image.
*
* @param string name of the file to render the image to (optional)
*/
public function render($fileName = null) {
// Check the data model
$this->checkDataModel();
$this->bound->computeBound($this->dataSet);
$this->computeAxis();
$this->computeLayout();
$this->createImage();
//$this->plot->printLogo();
//$this->plot->printTitle();
if (!$this->isEmptyDataSet(1)) {
$this->printAxis();
$this->printBar();
if ($this->hasSeveralSerie) {
$this->printCaption();
}
}
$this->plot->render($fileName);
}
}
?>

View File

@@ -1,99 +0,0 @@
<?php
/* Libchart - PHP chart library
* Copyright (C) 2005-2007 Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 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 more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/**
* Color.
*
* @author Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
*/
class Color {
private $red;
private $green;
private $blue;
private $alpha;
private $gdColor;
/**
* Creates a new color
*
* @param integer red [0..255]
* @param integer green [0..255]
* @param integer blue [0..255]
* @param integer alpha [0..255]
*/
public function Color($red, $green, $blue, $alpha = 0) {
$this->red = (int) $red;
$this->green = (int) $green;
$this->blue = (int) $blue;
$this->alpha = (int) round($alpha * 127.0 / 255);
$this->gdColor = null;
}
/**
* Get GD color.
*
* @param $img GD image resource
*/
public function getColor($img) {
// Checks if color has already been allocated
if (!$this->gdColor) {
if ($this->alpha == 0 || !function_exists('imagecolorallocatealpha')) {
$this->gdColor = imagecolorallocate($img, $this->red, $this->green, $this->blue);
} else {
$this->gdColor = imagecolorallocatealpha($img, $this->red, $this->green, $this->blue, $this->alpha);
}
}
// Returns GD color
return $this->gdColor;
}
/**
* Clip a color component in the interval [0..255]
*
* @param integer Component
* @return Clipped component
*/
public function clip($component) {
if ($component < 0) {
$component = 0;
} else if ($component > 255) {
$component = 255;
}
return $component;
}
/**
* Return a new color, which is a shadow of this one.
*
* @param double Multiplication factor
* @return Shadow color
*/
public function getShadowColor($shadowFactor) {
$red = $this->clip($this->red * $shadowFactor);
$green = $this->clip($this->green * $shadowFactor);
$blue = $this->clip($this->blue * $shadowFactor);
$shadowColor = new Color($red, $green, $blue);
return $shadowColor;
}
}
?>

View File

@@ -1,83 +0,0 @@
<?php
/* Libchart - PHP chart library
* Copyright (C) 2005-2007 Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 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 more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/**
* A set of colors, used for drawing series of data.
*
* @author Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
* Created on 26 july 2007
*/
class ColorSet {
public $colorList;
public $shadowColorList;
/**
* ColorSet constructor.
*
* @param $shadowFactor Shadow factor
* @param $colorArray Colors as an array
*/
public function ColorSet($colorList, $shadowFactor) {
$this->colorList = $colorList;
$this->shadowColorList = array();
// Generate the shadow color set
foreach ($colorList as $color) {
$shadowColor = $color->getShadowColor($shadowFactor);
array_push($this->shadowColorList, $shadowColor);
}
}
/**
* Reset the iterator over the collections of colors.
*/
public function reset() {
reset($this->colorList);
reset($this->shadowColorList);
}
/**
* Iterate over the colors and shadow colors. When we go after the last one, loop over (TODO).
*
*/
public function next() {
next($this->colorList);
next($this->shadowColorList);
}
/**
* Returns the current color.
*
* @return Current color
*/
public function currentColor() {
return current($this->colorList);
}
/**
* Returns the current shadow color.
*
* @return Current shadow color
*/
public function currentShadowColor() {
return current($this->shadowColorList);
}
}
?>

View File

@@ -1,110 +0,0 @@
<?php
/* Libchart - PHP chart library
* Copyright (C) 2005-2007 Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 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 more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/**
* Color palette shared by all chart types.
*
* @author Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
* Created on 25 july 2007
*/
class Palette {
public $red;
public $axisColor;
public $aquaColor;
public $barColorSet;
public $lineColorSet;
public $pieColorSet;
/**
* Palette constructor.
*/
public function Palette() {
$this->red = new Color(255, 0, 0);
// Colors for the horizontal and vertical axis
$this->axisColor = array(
new Color(201, 201, 201),
new Color(158, 158, 158)
);
// Colors for the background
$this->aquaColor = array(
new Color(242, 242, 242),
new Color(231, 231, 231),
new Color(239, 239, 239),
new Color(253, 253, 253)
);
// Colors for the bars
$this->barColorSet = new ColorSet(array(
new Color(42, 71, 181),
new Color(243, 198, 118),
new Color(128, 63, 35),
new Color(128, 63, 35),
new Color(195, 45, 28),
new Color(224, 198, 165),
new Color(239, 238, 218),
new Color(40, 72, 59),
new Color(71, 112, 132),
new Color(167, 192, 199),
new Color(218, 233, 202)
), 0.75);
// Colors for the lines
$this->lineColorSet = new ColorSet(array(
new Color(172, 172, 210),
new Color(2, 78, 0),
new Color(148, 170, 36),
new Color(233, 191, 49),
new Color(240, 127, 41),
new Color(243, 63, 34),
new Color(190, 71, 47),
new Color(135, 81, 60),
new Color(128, 78, 162),
new Color(121, 75, 255),
new Color(142, 165, 250),
new Color(162, 254, 239),
new Color(137, 240, 166),
new Color(104, 221, 71),
new Color(98, 174, 35),
new Color(93, 129, 1)
), 0.75);
// Colors for the pie
$this->pieColorSet = new ColorSet(array(
new Color(2, 78, 0),
new Color(148, 170, 36),
new Color(233, 191, 49),
new Color(240, 127, 41),
new Color(243, 63, 34),
new Color(190, 71, 47),
new Color(135, 81, 60),
new Color(128, 78, 162),
new Color(121, 75, 255),
new Color(142, 165, 250),
new Color(162, 254, 239),
new Color(137, 240, 166),
new Color(104, 221, 71),
new Color(98, 174, 35),
new Color(93, 129, 1)
), 0.7);
}
}
?>

File diff suppressed because it is too large Load Diff

View File

@@ -1,68 +0,0 @@
<?php
/* Libchart - PHP chart library
* Copyright (C) 2005-2007 Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 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 more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/**
* A padding.
*
* @author Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
* @Created on 27 july 2007
*/
class Padding {
/**
* Top padding
*/
public $top;
/**
* Right padding
*/
public $right;
/**
* Bottom padding
*/
public $bottom;
/**
* Left padding
*/
public $left;
/**
* Creates a new padding.
*
* @param integer Top padding
* @param integer Right padding
* @param integer Bottom padding
* @param integer Left padding
*/
public function Padding($top, $right = null, $bottom = null, $left = null) {
$this->top = $top;
if ($right == null) {
$this->right = $top;
$this->bottom = $top;
$this->left = $top;
} else {
$this->right = $right;
$this->bottom = $bottom;
$this->left = $left;
}
}
}
?>

View File

@@ -1,70 +0,0 @@
<?php
/* Libchart - PHP chart library
* Copyright (C) 2005-2007 Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 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 more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/**
* Graphic primitives, extends GD with chart related primitives.
*
* @author Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
*/
class Primitive {
private $img;
/**
* Creates a new primitive object
*
* @param resource GD image resource
*/
public function Primitive($img) {
$this->img = $img;
}
/**
* Draws a straight line.
*
* @param integer line start (X)
* @param integer line start (Y)
* @param integer line end (X)
* @param integer line end (Y)
* @param Color line color
*/
public function line($x1, $y1, $x2, $y2, $color, $width = 1) {
imagefilledpolygon($this->img, array($x1, $y1 - $width / 2, $x1, $y1 + $width / 2, $x2, $y2 + $width / 2, $x2, $y2 - $width / 2), 4, $color->getColor($this->img));
// imageline($this->img, $x1, $y1, $x2, $y2, $color->getColor($this->img));
}
/**
* Draw a filled gray box with thick borders and darker corners.
*
* @param integer top left coordinate (x)
* @param integer top left coordinate (y)
* @param integer bottom right coordinate (x)
* @param integer bottom right coordinate (y)
* @param Color edge color
* @param Color corner color
*/
public function outlinedBox($x1, $y1, $x2, $y2, $color0, $color1) {
imagefilledrectangle($this->img, $x1, $y1, $x2, $y2, $color0->getColor($this->img));
imagerectangle($this->img, $x1, $y1, $x1 + 1, $y1 + 1, $color1->getColor($this->img));
imagerectangle($this->img, $x2 - 1, $y1, $x2, $y1 + 1, $color1->getColor($this->img));
imagerectangle($this->img, $x1, $y2 - 1, $x1 + 1, $y2, $color1->getColor($this->img));
imagerectangle($this->img, $x2 - 1, $y2 - 1, $x2, $y2, $color1->getColor($this->img));
}
}
?>

View File

@@ -1,76 +0,0 @@
<?php
/* Libchart - PHP chart library
* Copyright (C) 2005-2007 Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 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 more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/**
* A rectangle identified by the top-left and the bottom-right corners.
*
* @author Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
* @Created on 27 july 2007
*/
class Rectangle {
/**
* Top left X
*/
public $x1;
/**
* Top left Y
*/
public $y1;
/**
* Bottom right X
*/
public $x2;
/**
* Bottom right Y
*/
public $y2;
/**
* Creates a new rectangle
*
* @param resource GD image resource
*/
public function Rectangle($x1, $y1, $x2, $y2) {
$this->x1 = $x1;
$this->y1 = $y1;
$this->x2 = $x2;
$this->y2 = $y2;
}
/**
* Apply a padding and returns the resulting rectangle.
*
* @return Resulting rectangle
*/
public function getPaddedRectangle($padding) {
$rectangle = new Rectangle(
$this->x1 + $padding->left,
$this->y1 + $padding->top,
$this->x2 - $padding->right,
$this->y2 - $padding->bottom
);
//echo "(" . $this->x1 . "," . $this->y1 . ") (" . $this->x2 . "," . $this->y2 . ")<br>";
return $rectangle;
}
}
?>

View File

@@ -1,129 +0,0 @@
<?php
/* Libchart - PHP chart library
* Copyright (C) 2005-2007 Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 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 more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/**
* Text drawing helper
*
* @author Jean-Marc Tr<54>meaux (jm.tremeaux at gmail.com)
*/
class Text {
public $HORIZONTAL_LEFT_ALIGN = 1;
public $HORIZONTAL_CENTER_ALIGN = 2;
public $HORIZONTAL_RIGHT_ALIGN = 4;
public $VERTICAL_TOP_ALIGN = 8;
public $VERTICAL_CENTER_ALIGN = 16;
public $VERTICAL_BOTTOM_ALIGN = 32;
/**
* Creates a new text drawing helper.
*/
public function Text() {
$baseDir = dirname(__FILE__) . "/../../../";
// Free low-res fonts based on Bitstream Vera <http://dejavu.sourceforge.net/wiki/>
$this->fontCondensed = $baseDir . "fonts/DejaVuSansCondensed.ttf";
$this->fontCondensedBold = $baseDir . "fonts/DejaVuSansCondensed-Bold.ttf";
}
/**
* Print text.
*
* @param Image GD image
* @param integer text coordinate (x)
* @param integer text coordinate (y)
* @param Color text color
* @param string text value
* @param string font file name
* @param bitfield text alignment
*/
public function printText($img, $px, $py, $color, $text, $fontFileName, $align = 0) {
if (!($align & $this->HORIZONTAL_CENTER_ALIGN) && !($align & $this->HORIZONTAL_RIGHT_ALIGN)) {
$align |= $this->HORIZONTAL_LEFT_ALIGN;
}
if (!($align & $this->VERTICAL_CENTER_ALIGN) && !($align & $this->VERTICAL_BOTTOM_ALIGN)) {
$align |= $this->VERTICAL_TOP_ALIGN;
}
$fontSize = 8;
$lineSpacing = 1;
list ($llx, $lly, $lrx, $lry, $urx, $ury, $ulx, $uly) = imageftbbox($fontSize, 0, $fontFileName, $text, array("linespacing" => $lineSpacing));
$textWidth = $lrx - $llx;
$textHeight = $lry - $ury;
$angle = 0;
if ($align & $this->HORIZONTAL_CENTER_ALIGN) {
$px -= $textWidth / 2;
}
if ($align & $this->HORIZONTAL_RIGHT_ALIGN) {
$px -= $textWidth;
}
if ($align & $this->VERTICAL_CENTER_ALIGN) {
$py += $textHeight / 2;
}
if ($align & $this->VERTICAL_TOP_ALIGN) {
$py += $textHeight;
}
imagettftext($img, $fontSize, $angle, $px, $py, $color->getColor($img), $fontFileName, $text);
}
/**
* Print text centered horizontally on the image.
*
* @param Image GD image
* @param integer text coordinate (y)
* @param Color text color
* @param string text value
* @param string font file name
*/
public function printCentered($img, $py, $color, $text, $fontFileName) {
$this->printText($img, imagesx($img) / 2, $py, $color, $text, $fontFileName, $this->HORIZONTAL_CENTER_ALIGN | $this->VERTICAL_CENTER_ALIGN);
}
/**
* Print text in diagonal.
*
* @param Image GD image
* @param integer text coordinate (x)
* @param integer text coordinate (y)
* @param Color text color
* @param string text value
*/
public function printDiagonal($img, $px, $py, $color, $text) {
$fontSize = 8;
$fontFileName = $this->fontCondensed;
$lineSpacing = 1;
list ($lx, $ly, $rx, $ry) = imageftbbox($fontSize, 0, $fontFileName, $text, array("linespacing" => $lineSpacing));
$textWidth = $rx - $lx;
$angle = -30;
imagettftext($img, $fontSize, $angle, $px, $py, $color->getColor($img), $fontFileName, $text);
}
}
?>

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB