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
path: root/core
diff options
context:
space:
mode:
authorThomas Steur <thomas.steur@gmail.com>2013-11-20 07:40:08 +0400
committerThomas Steur <thomas.steur@gmail.com>2013-11-20 07:40:08 +0400
commit4793bc774656c59df6a48eed239f72718570ac35 (patch)
tree5d4e08a01b3b6fa8a3adc1e48fb51a6320a76f88 /core
parent4cec24f6b8db0a8d65952cb837ea8632ec5cc3a4 (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.php9
-rw-r--r--core/DataTable/Row.php2
-rw-r--r--core/Metrics.php45
-rw-r--r--core/Twig.php9
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) {