Index: branches/5.2.x/core/units/general/libchart/classes/model/Point.php =================================================================== --- branches/5.2.x/core/units/general/libchart/classes/model/Point.php (revision 16665) +++ branches/5.2.x/core/units/general/libchart/classes/model/Point.php (revision 16666) @@ -1,60 +1,60 @@ . * */ defined('FULL_PATH') or die('restricted access!'); /** * 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émeaux (jm.tremeaux at gmail.com) */ class LibchartPoint { 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 LibchartPoint($x, $y) { + public function __construct($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; } - } \ No newline at end of file + } Index: branches/5.2.x/core/units/general/libchart/classes/model/XYSeriesDataSet.php =================================================================== --- branches/5.2.x/core/units/general/libchart/classes/model/XYSeriesDataSet.php (revision 16665) +++ branches/5.2.x/core/units/general/libchart/classes/model/XYSeriesDataSet.php (revision 16666) @@ -1,77 +1,77 @@ . * */ defined('FULL_PATH') or die('restricted access!'); /** * This dataset comprises several series of points and is used to plot multiple lines charts. * Each serie is a XYDataSet. * * @author Jean-Marc Trémeaux (jm.tremeaux at gmail.com) * Created on 20 july 2007 */ class LibchartXYSeriesDataSet extends LibchartDataSet { /** * List of titles */ private $titleList; /** * List of XYDataSet. */ private $serieList; /** * Constructor of XYSeriesDataSet. * */ - public function LibchartXYSeriesDataSet() { + public function __construct() { $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; } - } \ No newline at end of file + } Index: branches/5.2.x/core/units/general/libchart/classes/model/XYDataSet.php =================================================================== --- branches/5.2.x/core/units/general/libchart/classes/model/XYDataSet.php (revision 16665) +++ branches/5.2.x/core/units/general/libchart/classes/model/XYDataSet.php (revision 16666) @@ -1,57 +1,57 @@ . * */ defined('FULL_PATH') or die('restricted access!'); /** * Set of data in the form of (x, y) items. * * @author Jean-Marc Trémeaux (jm.tremeaux at gmail.com) * Created on 10 may 2007 */ class LibchartXYDataSet extends LibchartDataSet { private $pointList; /** * Constructor of XYDataSet. * */ - public function LibchartXYDataSet() { + public function __construct() { $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; } - } \ No newline at end of file + } Index: branches/5.2.x/core/units/general/libchart/classes/view/chart/LineChart.php =================================================================== --- branches/5.2.x/core/units/general/libchart/classes/view/chart/LineChart.php (revision 16665) +++ branches/5.2.x/core/units/general/libchart/classes/view/chart/LineChart.php (revision 16666) @@ -1,201 +1,201 @@ . * */ defined('FULL_PATH') or die('restricted access!'); /** * Line chart. * * @author Jean-Marc Trémeaux (jm.tremeaux at gmail.com) */ class LibchartLineChart extends LibchartBarChart { /** * 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 LibchartLineChart($width = 600, $height = 250) { - parent::LibchartBarChart($width, $height); + public function __construct($width = 600, $height = 250) { + parent::__construct($width, $height); $this->plot->setGraphPadding(new LibchartPadding(5, 30, 50, 50)); } /** * 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 LibchartCaption(); $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); } - } \ No newline at end of file + } Index: branches/5.2.x/core/units/general/libchart/classes/view/chart/PieChart.php =================================================================== --- branches/5.2.x/core/units/general/libchart/classes/view/chart/PieChart.php (revision 16665) +++ branches/5.2.x/core/units/general/libchart/classes/view/chart/PieChart.php (revision 16666) @@ -1,254 +1,254 @@ . * */ defined('FULL_PATH') or die('restricted access!'); /** * Pie chart. * * @author Jean-Marc Trémeaux (jm.tremeaux at gmail.com) */ class LibchartPieChart extends LibchartChart { protected $pieCenterX; protected $pieCenterY; /** * Constructor of a pie chart. * * @param integer width of the image * @param integer height of the image */ - public function LibchartPieChart($width = 600, $height = 250) { - parent::LibchartChart($width, $height); + public function __construct($width = 600, $height = 250) { + parent::__construct($width, $height); $this->plot->setGraphPadding(new LibchartPadding(15, 10, 30, 30)); } /** * 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 LibchartCaption(); $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); } - } \ No newline at end of file + } Index: branches/5.2.x/core/units/general/libchart/classes/view/chart/HorizontalBarChart.php =================================================================== --- branches/5.2.x/core/units/general/libchart/classes/view/chart/HorizontalBarChart.php (revision 16665) +++ branches/5.2.x/core/units/general/libchart/classes/view/chart/HorizontalBarChart.php (revision 16666) @@ -1,212 +1,212 @@ . * */ /** * Horizontal bar chart * * @author Jean-Marc Trémeaux (jm.tremeaux at gmail.com) */ class LibchartHorizontalBarChart extends LibchartBarChart { /** * 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 LibchartHorizontalBarChart($width = 600, $height = 250) { - parent::BarChart($width, $height); + public function __construct($width = 600, $height = 250) { + parent::__construct($width, $height); $this->emptyToFullRatio = 1 / 5; $this->plot->setGraphPadding(new Padding(5, 30, 30, 50)); } /** * 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 LibchartCaption(); $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); } - } \ No newline at end of file + } Index: branches/5.2.x/core/units/general/libchart/classes/view/chart/VerticalBarChart.php =================================================================== --- branches/5.2.x/core/units/general/libchart/classes/view/chart/VerticalBarChart.php (revision 16665) +++ branches/5.2.x/core/units/general/libchart/classes/view/chart/VerticalBarChart.php (revision 16666) @@ -1,214 +1,214 @@ . * */ defined('FULL_PATH') or die('restricted access!'); /** * Chart composed of vertical bars. * * @author Jean-Marc Trémeaux (jm.tremeaux at gmail.com) */ class LibchartVerticalBarChart extends LibchartBarChart { /** * 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 LibchartVerticalBarChart($width = 600, $height = 250) { - parent::LibchartBarChart($width, $height); + public function __construct($width = 600, $height = 250) { + parent::__construct($width, $height); $this->emptyToFullRatio = 1 / 5; $this->plot->setGraphPadding(new LibchartPadding(5, 30, 50, 50)); } /** * 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 LibchartCaption(); $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); } - } \ No newline at end of file + } Index: branches/5.2.x/core/units/general/libchart/classes/view/chart/Chart.php =================================================================== --- branches/5.2.x/core/units/general/libchart/classes/view/chart/Chart.php (revision 16665) +++ branches/5.2.x/core/units/general/libchart/classes/view/chart/Chart.php (revision 16666) @@ -1,103 +1,103 @@ . * */ defined('FULL_PATH') or die('restricted access!'); /*! \mainpage Libchart * * This is the reference API, automatically compiled by Doxygen. * You can find here information that is not covered by the tutorial. * */ /** * Base chart class. * * @author Jean-Marc Trémeaux (jm.tremeaux at gmail.com) */ abstract class LibchartChart { /** * 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 LibchartChart($width, $height) { + protected function __construct($width, $height) { // Creates the plot $this->plot = new LibchartPlot($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); } - } \ No newline at end of file + } Index: branches/5.2.x/core/units/general/libchart/classes/view/chart/BarChart.php =================================================================== --- branches/5.2.x/core/units/general/libchart/classes/view/chart/BarChart.php (revision 16665) +++ branches/5.2.x/core/units/general/libchart/classes/view/chart/BarChart.php (revision 16666) @@ -1,175 +1,175 @@ . * */ defined('FULL_PATH') or die('restricted access!'); /** * Base abstract class for rendering both horizontal and vertical bar charts. * * @author Jean-Marc Trémeaux (jm.tremeaux at gmail.com) */ abstract class LibchartBarChart extends LibchartChart { 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 LibchartBarChart($width, $height) { - parent::LibchartChart($width, $height); + protected function __construct($width, $height) { + parent::__construct($width, $height); // Initialize the bounds $this->bound = new LibchartBound(); $this->bound->setLowerBound(0); } /** * Compute the axis. */ protected function computeAxis() { $this->axis = new LibchartAxis($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 LibchartXYDataSet) { $pointList = $this->dataSet->getPointList(); $pointCount = count($pointList); return $pointCount < $minNumberOfPoint; } else if ($this->dataSet instanceof LibchartXYSeriesDataSet) { $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 LibchartXYDataSet) { // The dataset contains only one serie $this->hasSeveralSerie = false; } else if ($this->dataSet instanceof LibchartXYSeriesDataSet) { // 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 LibchartXYSeriesDataSet) { $serieList = $this->dataSet->getSerieList(); } else if ($this->dataSet instanceof LibchartXYDataSet) { $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 LibchartXYSeriesDataSet) { // 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 LibchartXYDataSet) { $pointList = $this->dataSet->getPointList(); } return $pointList; } - } \ No newline at end of file + } Index: branches/5.2.x/core/units/general/libchart/classes/view/axis/Axis.php =================================================================== --- branches/5.2.x/core/units/general/libchart/classes/view/axis/Axis.php (revision 16665) +++ branches/5.2.x/core/units/general/libchart/classes/view/axis/Axis.php (revision 16666) @@ -1,131 +1,131 @@ . * */ defined('FULL_PATH') or die('restricted access!'); /** * Automatic axis boundaries and ticks calibration * * @author Jean-Marc Trémeaux (jm.tremeaux at gmail.com) */ class LibchartAxis { 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 LibchartAxis($min, $max) { + public function __construct($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; } - } \ No newline at end of file + } Index: branches/5.2.x/core/units/general/libchart/classes/view/text/Text.php =================================================================== --- branches/5.2.x/core/units/general/libchart/classes/view/text/Text.php (revision 16665) +++ branches/5.2.x/core/units/general/libchart/classes/view/text/Text.php (revision 16666) @@ -1,130 +1,130 @@ . * */ defined('FULL_PATH') or die('restricted access!'); /** * Text drawing helper * * @author Jean-Marc Trémeaux (jm.tremeaux at gmail.com) */ class LibchartText { 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 LibchartText() { + public function __construct() { $baseDir = dirname(__FILE__) . "/../../../"; // Free low-res fonts based on Bitstream Vera $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 = -45; imagettftext($img, $fontSize, $angle, $px, $py, $color->getColor($img), $fontFileName, $text); } - } \ No newline at end of file + } Index: branches/5.2.x/core/units/general/libchart/classes/view/primitive/Rectangle.php =================================================================== --- branches/5.2.x/core/units/general/libchart/classes/view/primitive/Rectangle.php (revision 16665) +++ branches/5.2.x/core/units/general/libchart/classes/view/primitive/Rectangle.php (revision 16666) @@ -1,77 +1,77 @@ . * */ defined('FULL_PATH') or die('restricted access!'); /** * A rectangle identified by the top-left and the bottom-right corners. * * @author Jean-Marc Trémeaux (jm.tremeaux at gmail.com) * @Created on 27 july 2007 */ class LibchartRectangle { /** * 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 LibchartRectangle($x1, $y1, $x2, $y2) { + public function __construct($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 LibchartRectangle( $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 . ")
"; return $rectangle; } - } \ No newline at end of file + } Index: branches/5.2.x/core/units/general/libchart/classes/view/primitive/Padding.php =================================================================== --- branches/5.2.x/core/units/general/libchart/classes/view/primitive/Padding.php (revision 16665) +++ branches/5.2.x/core/units/general/libchart/classes/view/primitive/Padding.php (revision 16666) @@ -1,69 +1,69 @@ . * */ defined('FULL_PATH') or die('restricted access!'); /** * A padding. * * @author Jean-Marc Trémeaux (jm.tremeaux at gmail.com) * @Created on 27 july 2007 */ class LibchartPadding { /** * 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 LibchartPadding($top, $right = null, $bottom = null, $left = null) { + public function __construct($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; } } - } \ No newline at end of file + } Index: branches/5.2.x/core/units/general/libchart/classes/view/primitive/Primitive.php =================================================================== --- branches/5.2.x/core/units/general/libchart/classes/view/primitive/Primitive.php (revision 16665) +++ branches/5.2.x/core/units/general/libchart/classes/view/primitive/Primitive.php (revision 16666) @@ -1,71 +1,71 @@ . * */ defined('FULL_PATH') or die('restricted access!'); /** * Graphic primitives, extends GD with chart related primitives. * * @author Jean-Marc Trémeaux (jm.tremeaux at gmail.com) */ class LibchartPrimitive { private $img; /** * Creates a new primitive object * * @param resource GD image resource */ - public function LibchartPrimitive($img) { + public function __construct($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)); } - } \ No newline at end of file + } Index: branches/5.2.x/core/units/general/libchart/classes/view/caption/Caption.php =================================================================== --- branches/5.2.x/core/units/general/libchart/classes/view/caption/Caption.php (revision 16665) +++ branches/5.2.x/core/units/general/libchart/classes/view/caption/Caption.php (revision 16666) @@ -1,113 +1,113 @@ . * */ defined('FULL_PATH') or die('restricted access!'); /** * Caption. * * @author Jean-Marc Trémeaux (jm.tremeaux at gmail.com) * Created on 30 july 2007 */ class LibchartCaption { protected $labelBoxWidth; protected $labelBoxHeight; // Plot protected $plot; // Label list protected $labelList; // Color set protected $colorSet; /** * Constructor of Caption */ - public function LibchartCaption() { + public function __construct() { $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; } - } \ No newline at end of file + } Index: branches/5.2.x/core/units/general/libchart/classes/view/color/ColorSet.php =================================================================== --- branches/5.2.x/core/units/general/libchart/classes/view/color/ColorSet.php (revision 16665) +++ branches/5.2.x/core/units/general/libchart/classes/view/color/ColorSet.php (revision 16666) @@ -1,84 +1,84 @@ . * */ defined('FULL_PATH') or die('restricted access!'); /** * A set of colors, used for drawing series of data. * * @author Jean-Marc Trémeaux (jm.tremeaux at gmail.com) * Created on 26 july 2007 */ class LibchartColorSet { public $colorList; public $shadowColorList; /** * ColorSet constructor. * * @param $shadowFactor Shadow factor * @param $colorArray Colors as an array */ - public function LibchartColorSet($colorList, $shadowFactor) { + public function __construct($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); } - } \ No newline at end of file + } Index: branches/5.2.x/core/units/general/libchart/classes/view/color/Color.php =================================================================== --- branches/5.2.x/core/units/general/libchart/classes/view/color/Color.php (revision 16665) +++ branches/5.2.x/core/units/general/libchart/classes/view/color/Color.php (revision 16666) @@ -1,100 +1,100 @@ . * */ defined('FULL_PATH') or die('restricted access!'); /** * Color. * * @author Jean-Marc Trémeaux (jm.tremeaux at gmail.com) */ class LibchartColor { 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 LibchartColor($red, $green, $blue, $alpha = 0) { + public function __construct($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 LibchartColor($red, $green, $blue); return $shadowColor; } - } \ No newline at end of file + } Index: branches/5.2.x/core/units/general/libchart/classes/view/color/Palette.php =================================================================== --- branches/5.2.x/core/units/general/libchart/classes/view/color/Palette.php (revision 16665) +++ branches/5.2.x/core/units/general/libchart/classes/view/color/Palette.php (revision 16666) @@ -1,111 +1,111 @@ . * */ defined('FULL_PATH') or die('restricted access!'); /** * Color palette shared by all chart types. * * @author Jean-Marc Trémeaux (jm.tremeaux at gmail.com) * Created on 25 july 2007 */ class LibchartPalette { public $red; public $axisColor; public $aquaColor; public $barColorSet; public $lineColorSet; public $pieColorSet; /** * Palette constructor. */ - public function LibchartPalette() { + public function __construct() { $this->red = new LibchartColor(255, 0, 0); // Colors for the horizontal and vertical axis $this->axisColor = array( new LibchartColor(201, 201, 201), new LibchartColor(158, 158, 158) ); // Colors for the background $this->aquaColor = array( new LibchartColor(242, 242, 242), new LibchartColor(231, 231, 231), new LibchartColor(239, 239, 239), new LibchartColor(253, 253, 253) ); // Colors for the bars $this->barColorSet = new LibchartColorSet(array( new LibchartColor(42, 71, 181), new LibchartColor(243, 198, 118), new LibchartColor(128, 63, 35), new LibchartColor(128, 63, 35), new LibchartColor(195, 45, 28), new LibchartColor(224, 198, 165), new LibchartColor(239, 238, 218), new LibchartColor(40, 72, 59), new LibchartColor(71, 112, 132), new LibchartColor(167, 192, 199), new LibchartColor(218, 233, 202) ), 0.75); // Colors for the lines $this->lineColorSet = new LibchartColorSet(array( new LibchartColor(172, 172, 210), new LibchartColor(2, 78, 0), new LibchartColor(148, 170, 36), new LibchartColor(233, 191, 49), new LibchartColor(240, 127, 41), new LibchartColor(243, 63, 34), new LibchartColor(190, 71, 47), new LibchartColor(135, 81, 60), new LibchartColor(128, 78, 162), new LibchartColor(121, 75, 255), new LibchartColor(142, 165, 250), new LibchartColor(162, 254, 239), new LibchartColor(137, 240, 166), new LibchartColor(104, 221, 71), new LibchartColor(98, 174, 35), new LibchartColor(93, 129, 1) ), 0.75); // Colors for the pie $this->pieColorSet = new LibchartColorSet(array( new LibchartColor(2, 78, 0), new LibchartColor(148, 170, 36), new LibchartColor(233, 191, 49), new LibchartColor(240, 127, 41), new LibchartColor(243, 63, 34), new LibchartColor(190, 71, 47), new LibchartColor(135, 81, 60), new LibchartColor(128, 78, 162), new LibchartColor(121, 75, 255), new LibchartColor(142, 165, 250), new LibchartColor(162, 254, 239), new LibchartColor(137, 240, 166), new LibchartColor(104, 221, 71), new LibchartColor(98, 174, 35), new LibchartColor(93, 129, 1) ), 0.7); } - } \ No newline at end of file + } Index: branches/5.2.x/core/units/general/libchart/classes/view/plot/Plot.php =================================================================== --- branches/5.2.x/core/units/general/libchart/classes/view/plot/Plot.php (revision 16665) +++ branches/5.2.x/core/units/general/libchart/classes/view/plot/Plot.php (revision 16666) @@ -1,416 +1,416 @@ . * */ defined('FULL_PATH') or die('restricted access!'); /** * The plot holds graphical attributes, and is responsible for computing the layout of the graph. * The layout is quite simple right now, with 4 areas laid out like that: * (of course this is subject to change in the future). * * output area------------------------------------------------| * | (outer padding) | * | image area--------------------------------------------| | * | | (title padding) | | * | | title area----------------------------------------| | | * | | |-------------------------------------------------| | | * | | | | * | | (graph padding) (caption padding) | | * | | graph area----------------| caption area---------| | | * | | | | | | | | * | | | | | | | | * | | | | | | | | * | | | | | | | | * | | | | | | | | * | | |-------------------------| |--------------------| | | * | | | | * | |-----------------------------------------------------| | * | | * |----------------------------------------------------------| * * All area dimensions are known in advance , and the optional logo is drawn in absolute coordinates. * * @author Jean-Marc Trémeaux (jm.tremeaux at gmail.com) * Created on 27 july 2007 */ class LibchartPlot { // Style properties protected $title; protected $logoFileName; // Outer area, whose dimension is the same as the PNG returned protected $outputArea; // Outer padding surrounding the whole image, everything outside is blank protected $outerPadding; // Coordinates of the area inside the outer padding protected $imageArea; // Fixed title height in pixels protected $titleHeight; // Padding of the title area protected $titlePadding; // Coordinates of the title area protected $titleArea; // True if the plot has a caption protected $hasCaption; // Ratio of graph/caption in width protected $graphCaptionRatio; // Padding of the graph area protected $graphPadding; // Coordinates of the graph area protected $graphArea; // Padding of the caption area protected $captionPadding; // Coordinates of the caption area protected $captionArea; /** * Text writer. */ protected $text; /** * Color palette. */ protected $palette; /** * GD image */ protected $img; /** * Drawing primitives */ protected $primitive; protected $backGroundColor; protected $textColor; /** * Constructor of Plot. * * @param integer width of the image * @param integer height of the image */ - public function LibchartPlot($width, $height) { + public function __construct($width, $height) { $this->width = $width; $this->height = $height; $this->text = new LibchartText(); $this->palette = new LibchartPalette(); // Default layout $this->outputArea = new LibchartRectangle(0, 0, $width - 1, $height - 1); $this->outerPadding = new LibchartPadding(5); $this->titleHeight = 26; $this->titlePadding = new LibchartPadding(5); $this->hasCaption = false; $this->graphCaptionRatio = 0.50; $this->graphPadding = new LibchartPadding(50); $this->captionPadding = new LibchartPadding(15); } /** * Compute the area inside the outer padding (outside is white). */ private function computeImageArea() { $this->imageArea = $this->outputArea->getPaddedRectangle($this->outerPadding); } /** * Compute the title area. */ private function computeTitleArea() { $titleUnpaddedBottom = $this->imageArea->y1 + $this->titleHeight + $this->titlePadding->top + $this->titlePadding->bottom; $titleArea = new LibchartRectangle( $this->imageArea->x1, $this->imageArea->y1, $this->imageArea->x2, $titleUnpaddedBottom - 1 ); $this->titleArea = $titleArea->getPaddedRectangle($this->titlePadding); } /** * Compute the graph area. */ private function computeGraphArea() { $titleUnpaddedBottom = $this->imageArea->y1 + $this->titleHeight + $this->titlePadding->top + $this->titlePadding->bottom; $graphArea = null; if ($this->hasCaption) { $graphUnpaddedRight = $this->imageArea->x1 + ($this->imageArea->x2 - $this->imageArea->x1) * $this->graphCaptionRatio + $this->graphPadding->left + $this->graphPadding->right; $graphArea = new LibchartRectangle( $this->imageArea->x1, $titleUnpaddedBottom, $graphUnpaddedRight - 1, $this->imageArea->y2 ); } else { $graphArea = new LibchartRectangle( $this->imageArea->x1, $titleUnpaddedBottom, $this->imageArea->x2, $this->imageArea->y2 ); } $this->graphArea = $graphArea->getPaddedRectangle($this->graphPadding); } /** * Compute the caption area. */ private function computeCaptionArea() { $graphUnpaddedRight = $this->imageArea->x1 + ($this->imageArea->x2 - $this->imageArea->x1) * $this->graphCaptionRatio + $this->graphPadding->left + $this->graphPadding->right; $titleUnpaddedBottom = $this->imageArea->y1 + $this->titleHeight + $this->titlePadding->top + $this->titlePadding->bottom; $captionArea = new LibchartRectangle( $graphUnpaddedRight, $titleUnpaddedBottom, $this->imageArea->x2, $this->imageArea->y2 ); $this->captionArea = $captionArea->getPaddedRectangle($this->captionPadding); } /** * Compute the layout of all areas of the graph. */ public function computeLayout() { $this->computeImageArea(); $this->computeTitleArea(); $this->computeGraphArea(); if ($this->hasCaption) { $this->computeCaptionArea(); } } /** * Creates and initialize the image. */ public function createImage() { $this->img = imagecreatetruecolor($this->width, $this->height); $this->primitive = new LibchartPrimitive($this->img); $this->backGroundColor = new LibchartColor(255, 255, 255); $this->textColor = new LibchartColor(0, 0, 0); // White background imagefilledrectangle($this->img, 0, 0, $this->width - 1, $this->height - 1, $this->backGroundColor->getColor($this->img)); //imagerectangle($this->img, $this->imageArea->x1, $this->imageArea->y1, $this->imageArea->x2, $this->imageArea->y2, $this->palette->red->getColor($this->img)); } /** * Print the title to the image. */ public function printTitle() { $yCenter = $this->titleArea->y1 + ($this->titleArea->y2 - $this->titleArea->y1) / 2; $this->text->printCentered($this->img, $yCenter, $this->textColor, $this->title, $this->text->fontCondensedBold); } /** * Print the logo image to the image. */ public function printLogo() { @$logoImage = imageCreateFromPNG($this->logoFileName); if ($logoImage) { imagecopymerge($this->img, $logoImage, 2 * $this->outerPadding->left, $this->outerPadding->top, 0, 0, imagesx($logoImage), imagesy($logoImage), 100); } } /** * Renders to a file or to standard output. * * @param fileName File name (optional) */ public function render($fileName) { if (isset($fileName)) { imagepng($this->img, $fileName); } else { imagepng($this->img); } } /** * Sets the title. * * @param string New title */ public function setTitle($title) { $this->title = $title; } /** * Sets the logo image file name. * * @param string New logo image file name */ public function setLogoFileName($logoFileName) { $this->logoFileName = $logoFileName; } /** * Return the GD image. * * @return GD Image */ public function getImg() { return $this->img; } /** * Return the palette. * * @return palette */ public function getPalette() { return $this->palette; } /** * Return the text. * * @return text */ public function getText() { return $this->text; } /** * Return the primitive. * * @return primitive */ public function getPrimitive() { return $this->primitive; } /** * Return the outer padding. * * @param integer Outer padding value in pixels */ public function getOuterPadding() { return $outerPadding; } /** * Set the outer padding. * * @param integer Outer padding value in pixels */ public function setOuterPadding($outerPadding) { $this->outerPadding = $outerPadding; } /** * Return the title height. * * @param integer title height */ public function setTitleHeight($titleHeight) { $this->titleHeight = $titleHeight; } /** * Return the title padding. * * @param integer title padding */ public function setTitlePadding($titlePadding) { $this->titlePadding = $titlePadding; } /** * Return the graph padding. * * @param integer graph padding */ public function setGraphPadding($graphPadding) { $this->graphPadding = $graphPadding; } /** * Set if the graph has a caption. * * @param boolean graph has a caption */ public function setHasCaption($hasCaption) { $this->hasCaption = $hasCaption; } /** * Set the caption padding. * * @param integer caption padding */ public function setCaptionPadding($captionPadding) { $this->captionPadding = $captionPadding; } /** * Set the graph/caption ratio. * * @param integer caption padding */ public function setGraphCaptionRatio($graphCaptionRatio) { $this->graphCaptionRatio = $graphCaptionRatio; } /** * Return the graph area. * * @return graph area */ public function getGraphArea() { return $this->graphArea; } /** * Return the caption area. * * @return caption area */ public function getCaptionArea() { return $this->captionArea; } /** * Return the text color. * * @return text color */ public function getTextColor() { return $this->textColor; } - } \ No newline at end of file + }