From c097f42a0f6af9d1dc8a76d933d3535e4ec7a908 Mon Sep 17 00:00:00 2001
From: Thomas Steur <thomas.steur@gmail.com>
Date: Wed, 20 Nov 2013 21:46:37 +0000
Subject: [PATCH] refs #1816 by generating total values before the generic
 filters, we only have to request the first level dataTable in case it is a
 subtable

---
 core/API/DataTableManipulator/Totals.php |  6 +++++-
 core/API/ResponseBuilder.php             | 10 +++++-----
 core/Metrics.php                         |  8 +-------
 3 files changed, 11 insertions(+), 13 deletions(-)

diff --git a/core/API/DataTableManipulator/Totals.php b/core/API/DataTableManipulator/Totals.php
index fd0dd2a146..ca2757de36 100644
--- a/core/API/DataTableManipulator/Totals.php
+++ b/core/API/DataTableManipulator/Totals.php
@@ -62,7 +62,7 @@ class Totals extends DataTableManipulator
 
         $this->totalValues = array();
 
-        $metricsToCalculate = Metrics::getMetricIdsToProcessRatio();
+        $metricsToCalculate = Metrics::getMetricIdsToProcessReportTotal();
         $parentTable        = $this->getFirstLevelDataTable($dataTable);
 
         foreach ($metricsToCalculate as $metricId) {
@@ -126,6 +126,10 @@ class Totals extends DataTableManipulator
 
     protected function getFirstLevelDataTable($table)
     {
+        if (!array_key_exists('idSubtable', $this->request)) {
+            return $table;
+        }
+
         $firstLevelReport = array();
         foreach ($this->getReportMetadata() as $report) {
             if (!empty($report['actionToLoadSubTables'])
diff --git a/core/API/ResponseBuilder.php b/core/API/ResponseBuilder.php
index 43616be345..db227b1e75 100644
--- a/core/API/ResponseBuilder.php
+++ b/core/API/ResponseBuilder.php
@@ -300,17 +300,17 @@ class ResponseBuilder
             $datatable = $flattener->flatten($datatable);
         }
 
+        if (1 == Common::getRequestVar('totals', '1', 'integer', $this->request)) {
+            $genericFilter = new Totals($this->apiModule, $this->apiMethod, $this->request);
+            $datatable = $genericFilter->generate($datatable);
+        }
+
         // if the flag disable_generic_filters is defined we skip the generic filters
         if (0 == Common::getRequestVar('disable_generic_filters', '0', 'string', $this->request)) {
             $genericFilter = new DataTableGenericFilter($this->request);
             $genericFilter->filter($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)
         $datatable->queueFilter('SafeDecodeLabel');
 
diff --git a/core/Metrics.php b/core/Metrics.php
index 9abb957a7a..9a4071658a 100644
--- a/core/Metrics.php
+++ b/core/Metrics.php
@@ -298,15 +298,9 @@ class Metrics
         return $columnIdRaw;
     }
 
-    static public function getMetricIdsToProcessRatio()
+    static public function getMetricIdsToProcessReportTotal()
     {
         return array(
-            self::$mappingFromIdToNameGoal[self::INDEX_GOAL_REVENUE],
-            self::$mappingFromIdToNameGoal[self::INDEX_GOAL_ECOMMERCE_REVENUE_SUBTOTAL],
-            self::$mappingFromIdToNameGoal[self::INDEX_GOAL_ECOMMERCE_REVENUE_TAX],
-            self::$mappingFromIdToNameGoal[self::INDEX_GOAL_ECOMMERCE_REVENUE_SHIPPING],
-            self::$mappingFromIdToNameGoal[self::INDEX_GOAL_ECOMMERCE_REVENUE_DISCOUNT],
-            self::$mappingFromIdToNameGoal[self::INDEX_GOAL_ECOMMERCE_ITEMS],
             self::INDEX_NB_VISITS,
             self::INDEX_NB_UNIQ_VISITORS,
             self::INDEX_NB_ACTIONS,
-- 
GitLab