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/HorizontalBar.php')
-rw-r--r--plugins/ImageGraph/StaticGraph/HorizontalBar.php346
1 files changed, 164 insertions, 182 deletions
diff --git a/plugins/ImageGraph/StaticGraph/HorizontalBar.php b/plugins/ImageGraph/StaticGraph/HorizontalBar.php
index e531239522..0fd8d46890 100644
--- a/plugins/ImageGraph/StaticGraph/HorizontalBar.php
+++ b/plugins/ImageGraph/StaticGraph/HorizontalBar.php
@@ -16,188 +16,170 @@
*/
class Piwik_ImageGraph_StaticGraph_HorizontalBar extends Piwik_ImageGraph_StaticGraph_GridGraph
{
- const INTERLEAVE = 0.30;
- const PADDING_CHARS = ' ';
- const LEGEND_SQUARE_WIDTH = 11;
- const MIN_SPACE_BETWEEN_HORIZONTAL_VALUES = 5;
- const LOGO_MIN_RIGHT_MARGIN = 3;
-
- public function renderGraph()
- {
- $verticalLegend = false;
-
- // determine the maximum logo width & height
- list($maxLogoWidth, $maxLogoHeight) = self::getMaxLogoSize($this->abscissaLogos);
-
- foreach($this->abscissaLogos as $logoPath)
- {
- list($logoWidth, $logoHeight) = self::getLogoSize($logoPath);
- $logoPathToHeight[$logoPath] = $logoHeight;
- }
-
- // truncate report
- $graphHeight = $this->getGraphBottom($horizontalGraph = true) - $this->getGridTopMargin($horizontalGraph = true, $verticalLegend);
-
- list($abscissaMaxWidth, $abscissaMaxHeight) = $this->getMaximumTextWidthHeight($this->abscissaSeries);
- list($ordinateMaxWidth, $ordinateMaxHeight) = $this->getMaximumTextWidthHeight($this->ordinateSeries);
-
- $numberOfSeries = count($this->ordinateSeries);
- $ordinateMaxHeight = $ordinateMaxHeight * $numberOfSeries;
-
- $textMaxHeight = $abscissaMaxHeight > $ordinateMaxHeight ? $abscissaMaxHeight : $ordinateMaxHeight;
-
- $minLineWidth = ($textMaxHeight > $maxLogoHeight ? $textMaxHeight : $maxLogoHeight) + (self::MIN_SPACE_BETWEEN_HORIZONTAL_VALUES * $numberOfSeries);
- $maxNumOfValues = floor($graphHeight / $minLineWidth);
- $abscissaSeriesCount = count($this->abscissaSeries);
-
- if($maxNumOfValues < $abscissaSeriesCount - 1)
- {
- $sumOfOthers = array();
- $truncatedOrdinateSeries = array();
- $truncatedAbscissaLogos = array();
- $truncatedAbscissaSeries = array();
- foreach($this->ordinateSeries as $column => $data)
- {
- $truncatedOrdinateSeries[$column] = array();
- $sumOfOthers[$column] = 0;
- }
-
- $i = 0;
- for(; $i < $maxNumOfValues; $i++)
- {
- foreach($this->ordinateSeries as $column => $data)
- {
- $truncatedOrdinateSeries[$column][] = $data[$i];
- }
-
- $truncatedAbscissaLogos[] = isset($this->abscissaLogos[$i]) ? $this->abscissaLogos[$i] : null;
- $truncatedAbscissaSeries[] = $this->abscissaSeries[$i];
- }
-
- for(; $i < $abscissaSeriesCount; $i++)
- {
- foreach($this->ordinateSeries as $column => $data)
- {
- $sumOfOthers[$column] += $data[$i];
- }
- }
-
- foreach($this->ordinateSeries as $column => $data)
- {
- $truncatedOrdinateSeries[$column][] = $sumOfOthers[$column];
- }
-
- $truncatedAbscissaSeries[] = Piwik_Translate('General_Others');
- $this->abscissaSeries = $truncatedAbscissaSeries;
- $this->ordinateSeries = $truncatedOrdinateSeries;
- $this->abscissaLogos = $truncatedAbscissaLogos;
- }
-
- // blank characters are used to pad labels so the logo can be displayed
- $paddingText = '';
- $paddingWidth = 0;
- if($maxLogoWidth > 0)
- {
- while($paddingWidth < $maxLogoWidth + self::LOGO_MIN_RIGHT_MARGIN)
- {
- $paddingText .= self::PADDING_CHARS;
- list($paddingWidth, $paddingHeight) = $this->getTextWidthHeight($paddingText);
- }
- }
-
- // determine the maximum label width according to the minimum comfortable graph size
- $gridRightMargin = $this->getGridRightMargin($horizontalGraph = true);
- $minGraphSize = ($this->width - $gridRightMargin) / 2;
-
- $metricLegendWidth = 0;
- foreach($this->ordinateLabels as $column => $label)
- {
- list($textWidth, $textHeight) = $this->getTextWidthHeight($label);
- $metricLegendWidth += $textWidth;
- }
-
- $legendWidth = $metricLegendWidth + ((self::HORIZONTAL_LEGEND_LEFT_MARGIN + self::LEGEND_SQUARE_WIDTH) * $numberOfSeries);
- if($this->showLegend)
- {
- if($legendWidth > $minGraphSize)
- {
- $minGraphSize = $legendWidth;
- }
- }
-
- $gridLeftMarginWithoutLabels = $this->getGridLeftMargin($horizontalGraph = true, $withLabel = false);
- $labelWidthLimit =
- $this->width
- - $gridLeftMarginWithoutLabels
- - $gridRightMargin
- - $paddingWidth
- - $minGraphSize;
-
- // truncate labels if needed
- foreach($this->abscissaSeries as &$label)
- {
- $label = $this->truncateLabel($label, $labelWidthLimit);
- }
-
- $gridLeftMarginBeforePadding = $this->getGridLeftMargin($horizontalGraph = true, $withLabel = true);
-
- // pad labels for logo space
- foreach($this->abscissaSeries as &$label)
- {
- $label .= $paddingText;
- }
-
- $this->initGridChart(
- $displayVerticalGridLines = false,
- $bulletType = LEGEND_FAMILY_BOX,
- $horizontalGraph = true,
- $showTicks = false,
- $verticalLegend
- );
-
- $valueColor = $this->colors[self::VALUE_COLOR_KEY];
- $this->pImage->drawBarChart(
- array(
- 'DisplayValues' => true,
- 'Interleave' => self::INTERLEAVE,
- 'DisplayR' => $valueColor['R'],
- 'DisplayG' => $valueColor['G'],
- 'DisplayB' => $valueColor['B'],
- )
- );
+ const INTERLEAVE = 0.30;
+ const PADDING_CHARS = ' ';
+ const LEGEND_SQUARE_WIDTH = 11;
+ const MIN_SPACE_BETWEEN_HORIZONTAL_VALUES = 5;
+ const LOGO_MIN_RIGHT_MARGIN = 3;
+
+ public function renderGraph()
+ {
+ $verticalLegend = false;
+
+ // determine the maximum logo width & height
+ list($maxLogoWidth, $maxLogoHeight) = self::getMaxLogoSize($this->abscissaLogos);
+
+ foreach ($this->abscissaLogos as $logoPath) {
+ list($logoWidth, $logoHeight) = self::getLogoSize($logoPath);
+ $logoPathToHeight[$logoPath] = $logoHeight;
+ }
+
+ // truncate report
+ $graphHeight = $this->getGraphBottom($horizontalGraph = true) - $this->getGridTopMargin($horizontalGraph = true, $verticalLegend);
+
+ list($abscissaMaxWidth, $abscissaMaxHeight) = $this->getMaximumTextWidthHeight($this->abscissaSeries);
+ list($ordinateMaxWidth, $ordinateMaxHeight) = $this->getMaximumTextWidthHeight($this->ordinateSeries);
+
+ $numberOfSeries = count($this->ordinateSeries);
+ $ordinateMaxHeight = $ordinateMaxHeight * $numberOfSeries;
+
+ $textMaxHeight = $abscissaMaxHeight > $ordinateMaxHeight ? $abscissaMaxHeight : $ordinateMaxHeight;
+
+ $minLineWidth = ($textMaxHeight > $maxLogoHeight ? $textMaxHeight : $maxLogoHeight) + (self::MIN_SPACE_BETWEEN_HORIZONTAL_VALUES * $numberOfSeries);
+ $maxNumOfValues = floor($graphHeight / $minLineWidth);
+ $abscissaSeriesCount = count($this->abscissaSeries);
+
+ if ($maxNumOfValues < $abscissaSeriesCount - 1) {
+ $sumOfOthers = array();
+ $truncatedOrdinateSeries = array();
+ $truncatedAbscissaLogos = array();
+ $truncatedAbscissaSeries = array();
+ foreach ($this->ordinateSeries as $column => $data) {
+ $truncatedOrdinateSeries[$column] = array();
+ $sumOfOthers[$column] = 0;
+ }
+
+ $i = 0;
+ for (; $i < $maxNumOfValues; $i++) {
+ foreach ($this->ordinateSeries as $column => $data) {
+ $truncatedOrdinateSeries[$column][] = $data[$i];
+ }
+
+ $truncatedAbscissaLogos[] = isset($this->abscissaLogos[$i]) ? $this->abscissaLogos[$i] : null;
+ $truncatedAbscissaSeries[] = $this->abscissaSeries[$i];
+ }
+
+ for (; $i < $abscissaSeriesCount; $i++) {
+ foreach ($this->ordinateSeries as $column => $data) {
+ $sumOfOthers[$column] += $data[$i];
+ }
+ }
+
+ foreach ($this->ordinateSeries as $column => $data) {
+ $truncatedOrdinateSeries[$column][] = $sumOfOthers[$column];
+ }
+
+ $truncatedAbscissaSeries[] = Piwik_Translate('General_Others');
+ $this->abscissaSeries = $truncatedAbscissaSeries;
+ $this->ordinateSeries = $truncatedOrdinateSeries;
+ $this->abscissaLogos = $truncatedAbscissaLogos;
+ }
+
+ // blank characters are used to pad labels so the logo can be displayed
+ $paddingText = '';
+ $paddingWidth = 0;
+ if ($maxLogoWidth > 0) {
+ while ($paddingWidth < $maxLogoWidth + self::LOGO_MIN_RIGHT_MARGIN) {
+ $paddingText .= self::PADDING_CHARS;
+ list($paddingWidth, $paddingHeight) = $this->getTextWidthHeight($paddingText);
+ }
+ }
+
+ // determine the maximum label width according to the minimum comfortable graph size
+ $gridRightMargin = $this->getGridRightMargin($horizontalGraph = true);
+ $minGraphSize = ($this->width - $gridRightMargin) / 2;
+
+ $metricLegendWidth = 0;
+ foreach ($this->ordinateLabels as $column => $label) {
+ list($textWidth, $textHeight) = $this->getTextWidthHeight($label);
+ $metricLegendWidth += $textWidth;
+ }
+
+ $legendWidth = $metricLegendWidth + ((self::HORIZONTAL_LEGEND_LEFT_MARGIN + self::LEGEND_SQUARE_WIDTH) * $numberOfSeries);
+ if ($this->showLegend) {
+ if ($legendWidth > $minGraphSize) {
+ $minGraphSize = $legendWidth;
+ }
+ }
+
+ $gridLeftMarginWithoutLabels = $this->getGridLeftMargin($horizontalGraph = true, $withLabel = false);
+ $labelWidthLimit =
+ $this->width
+ - $gridLeftMarginWithoutLabels
+ - $gridRightMargin
+ - $paddingWidth
+ - $minGraphSize;
+
+ // truncate labels if needed
+ foreach ($this->abscissaSeries as &$label) {
+ $label = $this->truncateLabel($label, $labelWidthLimit);
+ }
+
+ $gridLeftMarginBeforePadding = $this->getGridLeftMargin($horizontalGraph = true, $withLabel = true);
+
+ // pad labels for logo space
+ foreach ($this->abscissaSeries as &$label) {
+ $label .= $paddingText;
+ }
+
+ $this->initGridChart(
+ $displayVerticalGridLines = false,
+ $bulletType = LEGEND_FAMILY_BOX,
+ $horizontalGraph = true,
+ $showTicks = false,
+ $verticalLegend
+ );
+
+ $valueColor = $this->colors[self::VALUE_COLOR_KEY];
+ $this->pImage->drawBarChart(
+ array(
+ 'DisplayValues' => true,
+ 'Interleave' => self::INTERLEAVE,
+ 'DisplayR' => $valueColor['R'],
+ 'DisplayG' => $valueColor['G'],
+ 'DisplayB' => $valueColor['B'],
+ )
+ );
// // display icons
- $graphData = $this->pData->getData();
- $numberOfRows = count($this->abscissaSeries);
- $logoInterleave = $this->getGraphHeight(true, $verticalLegend) / $numberOfRows;
- for($i = 0; $i < $numberOfRows; $i++)
- {
- if(isset($this->abscissaLogos[$i]))
- {
- $logoPath = $this->abscissaLogos[$i];
-
- if(isset($logoPathToHeight[$logoPath]))
- {
- $logoHeight = $logoPathToHeight[$logoPath];
-
- $pathInfo = pathinfo($logoPath);
- $logoExtension = strtoupper($pathInfo['extension']);
- $drawingFunction = 'drawFrom' . $logoExtension;
-
- $logoYPosition =
- ($logoInterleave * $i)
- + $this->getGridTopMargin(true, $verticalLegend)
- + $graphData['Axis'][1]['Margin']
- - $logoHeight / 2
- + 1;
-
- $this->pImage->$drawingFunction(
- $gridLeftMarginBeforePadding,
- $logoYPosition,
- $logoPath
- );
- }
- }
- }
- }
+ $graphData = $this->pData->getData();
+ $numberOfRows = count($this->abscissaSeries);
+ $logoInterleave = $this->getGraphHeight(true, $verticalLegend) / $numberOfRows;
+ for ($i = 0; $i < $numberOfRows; $i++) {
+ if (isset($this->abscissaLogos[$i])) {
+ $logoPath = $this->abscissaLogos[$i];
+
+ if (isset($logoPathToHeight[$logoPath])) {
+ $logoHeight = $logoPathToHeight[$logoPath];
+
+ $pathInfo = pathinfo($logoPath);
+ $logoExtension = strtoupper($pathInfo['extension']);
+ $drawingFunction = 'drawFrom' . $logoExtension;
+
+ $logoYPosition =
+ ($logoInterleave * $i)
+ + $this->getGridTopMargin(true, $verticalLegend)
+ + $graphData['Axis'][1]['Margin']
+ - $logoHeight / 2
+ + 1;
+
+ $this->pImage->$drawingFunction(
+ $gridLeftMarginBeforePadding,
+ $logoYPosition,
+ $logoPath
+ );
+ }
+ }
+ }
+ }
}