diff options
author | Thomas Steur <thomas.steur@gmail.com> | 2013-11-20 07:40:08 +0400 |
---|---|---|
committer | Thomas Steur <thomas.steur@gmail.com> | 2013-11-20 07:40:08 +0400 |
commit | 4793bc774656c59df6a48eed239f72718570ac35 (patch) | |
tree | 5d4e08a01b3b6fa8a3adc1e48fb51a6320a76f88 /core | |
parent | 4cec24f6b8db0a8d65952cb837ea8632ec5cc3a4 (diff) |
refs #1816 do not create metrics for ratio, instead add total values to tableMetadata and generate ratio in view
Diffstat (limited to 'core')
-rw-r--r-- | core/API/DataTableManipulator/Totals.php (renamed from core/API/DataTableManipulator/AddRatioColumn.php) | 44 | ||||
-rw-r--r-- | core/API/ResponseBuilder.php | 9 | ||||
-rw-r--r-- | core/DataTable/Row.php | 2 | ||||
-rw-r--r-- | core/Metrics.php | 45 | ||||
-rw-r--r-- | core/Twig.php | 9 |
5 files changed, 22 insertions, 87 deletions
diff --git a/core/API/DataTableManipulator/AddRatioColumn.php b/core/API/DataTableManipulator/Totals.php index ea22f3c12b..2e5006f250 100644 --- a/core/API/DataTableManipulator/AddRatioColumn.php +++ b/core/API/DataTableManipulator/Totals.php @@ -25,7 +25,7 @@ use Piwik\Plugins\API\API; * @package Piwik * @subpackage Piwik_API */ -class AddRatioColumn extends DataTableManipulator +class Totals extends DataTableManipulator { protected $roundPrecision = 1; @@ -40,7 +40,7 @@ class AddRatioColumn extends DataTableManipulator * @param DataTable $table * @return \Piwik\DataTable|\Piwik\DataTable\Map */ - public function addColumns($table) + public function generate($table) { return $this->manipulate($table); } @@ -72,15 +72,7 @@ class AddRatioColumn extends DataTableManipulator } } - foreach ($this->totalValues as $metricId => $totalValue) { - if (!$this->hasDataTableMetric($dataTable, $metricId)) { - continue; - } - - foreach ($dataTable->getRows() as $row) { - $this->addRatioColumnIfPossible($row, $metricId, $totalValue); - } - } + $dataTable->setMetadata('totals', $this->totalValues); return $dataTable; } @@ -169,33 +161,13 @@ class AddRatioColumn extends DataTableManipulator return; } - if (array_key_exists($metricId, $this->totalValues)) { - $this->totalValues[$metricId] += $value; - } else { - $this->totalValues[$metricId] = $value; - } - } - - private function addRatioColumnIfPossible(Row $row, $metricId, $totalValue) - { - $value = $this->getColumn($row, $metricId); + $metricName = Metrics::getReadableColumnName($metricId); - if (false === $value) { - return; + if (array_key_exists($metricName, $this->totalValues)) { + $this->totalValues[$metricName] += $value; + } else { + $this->totalValues[$metricName] = $value; } - - $relativeValue = $this->getPercentage($value, $totalValue); - $metricName = Metrics::getReadableColumnName($metricId); - $ratioMetric = Metrics::makeReportRatioMetricName($metricName); - - $row->addColumn($ratioMetric, $relativeValue); - } - - private function getPercentage($value, $totalValue) - { - $percentage = Piwik::getPercentageSafe($value, $totalValue, $this->roundPrecision); - - return $percentage . '%'; } /** diff --git a/core/API/ResponseBuilder.php b/core/API/ResponseBuilder.php index d325d2bcb6..43616be345 100644 --- a/core/API/ResponseBuilder.php +++ b/core/API/ResponseBuilder.php @@ -11,9 +11,9 @@ namespace Piwik\API; use Exception; -use Piwik\API\DataTableManipulator\AddRatioColumn; use Piwik\API\DataTableManipulator\Flattener; use Piwik\API\DataTableManipulator\LabelFilter; +use Piwik\API\DataTableManipulator\Totals; use Piwik\Common; use Piwik\DataTable\Renderer\Json; use Piwik\DataTable\Renderer; @@ -306,10 +306,9 @@ class ResponseBuilder $genericFilter->filter($datatable); } - // if the flag disable_generic_filters is defined we skip the generic filters - if (1 == Common::getRequestVar('ratio', '1', 'integer', $this->request)) { - $genericFilter = new AddRatioColumn($this->apiModule, $this->apiMethod, $this->request); - $datatable = $genericFilter->addColumns($datatable); + if (1 == Common::getRequestVar('totals', '1', 'integer', $this->request)) { + $genericFilter = new Totals($this->apiModule, $this->apiMethod, $this->request); + $datatable = $genericFilter->generate($datatable); } // we automatically safe decode all datatable labels (against xss) diff --git a/core/DataTable/Row.php b/core/DataTable/Row.php index bc6a448b82..a8b3b24707 100644 --- a/core/DataTable/Row.php +++ b/core/DataTable/Row.php @@ -457,7 +457,7 @@ class Row public function sumRow(Row $rowToSum, $enableCopyMetadata = true, $aggregationOperations = false) { foreach ($rowToSum->getColumns() as $columnToSumName => $columnToSumValue) { - if (!isset(self::$unsummableColumns[$columnToSumName]) && false === strpos($columnToSumName, '_ratio')) // make sure we can add this column + if (!isset(self::$unsummableColumns[$columnToSumName])) // make sure we can add this column { $thisColumnValue = $this->getColumn($columnToSumName); diff --git a/core/Metrics.php b/core/Metrics.php index 10407f950a..9abb957a7a 100644 --- a/core/Metrics.php +++ b/core/Metrics.php @@ -322,51 +322,6 @@ class Metrics ); } - static public function getDefaultRatioMetrics() - { - $metrics = self::getMetricIdsToProcessRatio(); - $metricTranslations = self::getDefaultMetricTranslations(); - - $translations = array(); - - foreach ($metrics as $metricId) { - $readableMetric = self::getReadableColumnName($metricId); - $ratioMetric = self::makeReportRatioMetricName($readableMetric); - - if (array_key_exists($readableMetric, $metricTranslations)) { - $metricTranslated = $metricTranslations[$readableMetric]; - $translations[$ratioMetric] = Piwik::translate('General_ColumnRatioMetric', $metricTranslated); - } - } - - return $translations; - } - - static public function makeReportRatioMetricName($metric) - { - return $metric . '_ratio_report'; - } - - static public function getDefaultRatioMetricsDocumentation() - { - $metrics = self::getMetricIdsToProcessRatio(); - $metricTranslations = self::getDefaultMetricTranslations(); - - $translations = array(); - - foreach ($metrics as $metricId) { - $readableMetric = self::getReadableColumnName($metricId); - $ratioMetric = self::makeReportRatioMetricName($readableMetric); - - if (array_key_exists($readableMetric, $metricTranslations)) { - $metricTranslated = $metricTranslations[$readableMetric]; - $translations[$ratioMetric] = Piwik::translate('General_ColumnRatioMetricDocumentation', $metricTranslated); - } - } - - return $translations; - } - static public function getDefaultMetricsDocumentation() { $documentation = array( diff --git a/core/Twig.php b/core/Twig.php index 01282ef35d..69a6501d90 100644 --- a/core/Twig.php +++ b/core/Twig.php @@ -65,6 +65,7 @@ class Twig $this->addFilter_money(); $this->addFilter_truncate(); $this->addFilter_notificiation(); + $this->addFilter_percentage(); $this->twig->addFilter(new Twig_SimpleFilter('implode', 'implode')); $this->twig->addFilter(new Twig_SimpleFilter('ucwords', 'ucwords')); @@ -187,6 +188,14 @@ class Twig $this->twig->addFilter($notificationFunction); } + protected function addFilter_percentage() + { + $percentage = new Twig_SimpleFilter('percentage', function ($string, $totalValue, $precision = 1) { + return Piwik::getPercentageSafe($string, $totalValue, $precision) . '%'; + }); + $this->twig->addFilter($percentage); + } + protected function addFilter_truncate() { $truncateFilter = new Twig_SimpleFilter('truncate', function ($string, $size) { |