Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/ImageGraph/StaticGraph/PieGraph.php')
-rw-r--r--plugins/ImageGraph/StaticGraph/PieGraph.php217
1 files changed, 103 insertions, 114 deletions
diff --git a/plugins/ImageGraph/StaticGraph/PieGraph.php b/plugins/ImageGraph/StaticGraph/PieGraph.php
index 383f605432..d2b8df51c5 100644
--- a/plugins/ImageGraph/StaticGraph/PieGraph.php
+++ b/plugins/ImageGraph/StaticGraph/PieGraph.php
@@ -17,118 +17,107 @@ require_once PIWIK_INCLUDE_PATH . "/libs/pChart2.1.3/class/pPie.class.php";
*/
abstract class Piwik_ImageGraph_StaticGraph_PieGraph extends Piwik_ImageGraph_StaticGraph
{
- const RADIUS_MARGIN = 40;
- const PIE_RIGHT_MARGIN = 20;
- const SECTOR_GAP = 2.5;
-
- const SLICE_COLOR_KEY = "SLICE_COLOR";
-
- protected $pieChart;
- protected $xPosition;
- protected $yPosition;
- protected $pieConfig;
-
- protected function getDefaultColors()
- {
- return array(
- self::SLICE_COLOR_KEY . '1' => '3C5A69',
- self::SLICE_COLOR_KEY . '2' => '679BB5',
- self::SLICE_COLOR_KEY . '3' => '695A3C',
- self::SLICE_COLOR_KEY . '4' => 'B58E67',
- self::SLICE_COLOR_KEY . '5' => '8AA68A',
- self::SLICE_COLOR_KEY . '6' => 'A4D2A6',
- );
- }
-
- protected function initPieGraph($showLegend)
- {
- $this->truncateSmallValues();
- $this->initpData();
- $this->initpImage();
-
- if ($this->height > $this->width)
- {
- $radius = ($this->width / 2) - self::RADIUS_MARGIN;
- }
- else
- {
- $radius = ($this->height / 2) - self::RADIUS_MARGIN;
- }
-
- $this->pieChart = new pPie($this->pImage, $this->pData);
-
- $numberOfSlices = count($this->abscissaSeries);
- $numberOfAvailableColors = count($this->colors);
- for($i = 0; $i < $numberOfSlices; $i++)
- {
- $this->pieChart->setSliceColor($i, $this->colors[self::SLICE_COLOR_KEY . (($i % $numberOfAvailableColors) + 1)]);
- }
-
- // max abscissa label width is used to set the pie right margin
- list($abscissaMaxWidth, $abscissaMaxHeight) = $this->getMaximumTextWidthHeight($this->abscissaSeries);
-
- $this->xPosition = $this->width - $radius - $abscissaMaxWidth - self::PIE_RIGHT_MARGIN;
- $this->yPosition = $this->height / 2;
-
- if ($showLegend)
- {
- $this->pieChart->drawPieLegend(15, 40, array("Alpha" => 20));
- }
-
- $this->pieConfig =
- array(
- 'Radius' => $radius,
- 'DrawLabels' => true,
- 'DataGapAngle' => self::SECTOR_GAP,
- 'DataGapRadius' => self::SECTOR_GAP,
- );
- }
-
- /**
- * this method logic is close to Piwik's core filter_truncate.
- * it uses a threshold to determine if an abscissa value should be drawn on the PIE
- * discarded abscissa values are summed in the 'other' abscissa value
- *
- * if this process is not perform, pChart will draw pie slices that are too small to see
- */
- private function truncateSmallValues()
- {
- $metricColumns = array_keys($this->ordinateSeries);
- $metricColumn = $metricColumns[0];
-
- $ordinateValuesSum = 0;
- foreach($this->ordinateSeries[$metricColumn] as $ordinateValue)
- {
- $ordinateValuesSum += $ordinateValue;
- }
-
- $truncatedOrdinateSeries[$metricColumn] = array();
- $truncatedAbscissaSeries = array();
- $smallValuesSum = 0;
-
- $ordinateValuesCount = count($this->ordinateSeries[$metricColumn]);
- for($i = 0; $i < $ordinateValuesCount - 1 ; $i++)
- {
- $ordinateValue = $this->ordinateSeries[$metricColumn][$i];
- if($ordinateValue / $ordinateValuesSum > 0.01)
- {
- $truncatedOrdinateSeries[$metricColumn][] = $ordinateValue;
- $truncatedAbscissaSeries[] = $this->abscissaSeries[$i];
- }
- else
- {
- $smallValuesSum += $ordinateValue;
- }
- }
-
- $smallValuesSum += $this->ordinateSeries[$metricColumn][$ordinateValuesCount - 1];
- if(($smallValuesSum / $ordinateValuesSum) > 0.01)
- {
- $truncatedOrdinateSeries[$metricColumn][] = $smallValuesSum;
- $truncatedAbscissaSeries[] = Piwik_Translate('General_Others');
- }
-
- $this->ordinateSeries = $truncatedOrdinateSeries;
- $this->abscissaSeries = $truncatedAbscissaSeries;
- }
+ const RADIUS_MARGIN = 40;
+ const PIE_RIGHT_MARGIN = 20;
+ const SECTOR_GAP = 2.5;
+
+ const SLICE_COLOR_KEY = "SLICE_COLOR";
+
+ protected $pieChart;
+ protected $xPosition;
+ protected $yPosition;
+ protected $pieConfig;
+
+ protected function getDefaultColors()
+ {
+ return array(
+ self::SLICE_COLOR_KEY . '1' => '3C5A69',
+ self::SLICE_COLOR_KEY . '2' => '679BB5',
+ self::SLICE_COLOR_KEY . '3' => '695A3C',
+ self::SLICE_COLOR_KEY . '4' => 'B58E67',
+ self::SLICE_COLOR_KEY . '5' => '8AA68A',
+ self::SLICE_COLOR_KEY . '6' => 'A4D2A6',
+ );
+ }
+
+ protected function initPieGraph($showLegend)
+ {
+ $this->truncateSmallValues();
+ $this->initpData();
+ $this->initpImage();
+
+ if ($this->height > $this->width) {
+ $radius = ($this->width / 2) - self::RADIUS_MARGIN;
+ } else {
+ $radius = ($this->height / 2) - self::RADIUS_MARGIN;
+ }
+
+ $this->pieChart = new pPie($this->pImage, $this->pData);
+
+ $numberOfSlices = count($this->abscissaSeries);
+ $numberOfAvailableColors = count($this->colors);
+ for ($i = 0; $i < $numberOfSlices; $i++) {
+ $this->pieChart->setSliceColor($i, $this->colors[self::SLICE_COLOR_KEY . (($i % $numberOfAvailableColors) + 1)]);
+ }
+
+ // max abscissa label width is used to set the pie right margin
+ list($abscissaMaxWidth, $abscissaMaxHeight) = $this->getMaximumTextWidthHeight($this->abscissaSeries);
+
+ $this->xPosition = $this->width - $radius - $abscissaMaxWidth - self::PIE_RIGHT_MARGIN;
+ $this->yPosition = $this->height / 2;
+
+ if ($showLegend) {
+ $this->pieChart->drawPieLegend(15, 40, array("Alpha" => 20));
+ }
+
+ $this->pieConfig =
+ array(
+ 'Radius' => $radius,
+ 'DrawLabels' => true,
+ 'DataGapAngle' => self::SECTOR_GAP,
+ 'DataGapRadius' => self::SECTOR_GAP,
+ );
+ }
+
+ /**
+ * this method logic is close to Piwik's core filter_truncate.
+ * it uses a threshold to determine if an abscissa value should be drawn on the PIE
+ * discarded abscissa values are summed in the 'other' abscissa value
+ *
+ * if this process is not perform, pChart will draw pie slices that are too small to see
+ */
+ private function truncateSmallValues()
+ {
+ $metricColumns = array_keys($this->ordinateSeries);
+ $metricColumn = $metricColumns[0];
+
+ $ordinateValuesSum = 0;
+ foreach ($this->ordinateSeries[$metricColumn] as $ordinateValue) {
+ $ordinateValuesSum += $ordinateValue;
+ }
+
+ $truncatedOrdinateSeries[$metricColumn] = array();
+ $truncatedAbscissaSeries = array();
+ $smallValuesSum = 0;
+
+ $ordinateValuesCount = count($this->ordinateSeries[$metricColumn]);
+ for ($i = 0; $i < $ordinateValuesCount - 1; $i++) {
+ $ordinateValue = $this->ordinateSeries[$metricColumn][$i];
+ if ($ordinateValue / $ordinateValuesSum > 0.01) {
+ $truncatedOrdinateSeries[$metricColumn][] = $ordinateValue;
+ $truncatedAbscissaSeries[] = $this->abscissaSeries[$i];
+ } else {
+ $smallValuesSum += $ordinateValue;
+ }
+ }
+
+ $smallValuesSum += $this->ordinateSeries[$metricColumn][$ordinateValuesCount - 1];
+ if (($smallValuesSum / $ordinateValuesSum) > 0.01) {
+ $truncatedOrdinateSeries[$metricColumn][] = $smallValuesSum;
+ $truncatedAbscissaSeries[] = Piwik_Translate('General_Others');
+ }
+
+ $this->ordinateSeries = $truncatedOrdinateSeries;
+ $this->abscissaSeries = $truncatedAbscissaSeries;
+ }
}