From e37db246baa341063d4e2810150bacc63de24b5e Mon Sep 17 00:00:00 2001
From: mattab <matthieu.aubry@gmail.com>
Date: Sun, 12 Jul 2015 23:16:17 +0200
Subject: [PATCH] filter_excludelowpop=nb_visits  should work even before
 'ReplaceColumnNames' filter has been called

---
 .../DataTable/Filter/ExcludeLowPopulation.php | 33 ++++++++++++++++++-
 1 file changed, 32 insertions(+), 1 deletion(-)

diff --git a/core/DataTable/Filter/ExcludeLowPopulation.php b/core/DataTable/Filter/ExcludeLowPopulation.php
index 27d19fa86b..9e16cc0ef1 100644
--- a/core/DataTable/Filter/ExcludeLowPopulation.php
+++ b/core/DataTable/Filter/ExcludeLowPopulation.php
@@ -10,6 +10,7 @@ namespace Piwik\DataTable\Filter;
 
 use Piwik\DataTable;
 use Piwik\DataTable\BaseFilter;
+use Piwik\Metrics;
 
 /**
  * Deletes all rows for which a specific column has a value that is lower than
@@ -60,7 +61,12 @@ class ExcludeLowPopulation extends BaseFilter
     {
         parent::__construct($table);
 
-        $this->columnToFilter = $columnToFilter;
+        $row = $table->getFirstRow();
+        if ($row === false) {
+            return;
+        }
+
+        $this->columnToFilter = $this->selectColumnToExclude($columnToFilter, $row);
 
         if ($minimumValue == 0) {
             if ($minimumPercentageThreshold === false) {
@@ -88,4 +94,29 @@ class ExcludeLowPopulation extends BaseFilter
 
         $table->filter('ColumnCallbackDeleteRow', array($this->columnToFilter, $isValueLowPopulation));
     }
+
+    /**
+     * Sets the column to be used for Excluding low population
+     *
+     * @param DataTable\Row $row
+     * @return int
+     */
+    private function selectColumnToExclude($columnToFilter, $row)
+    {
+        if ($row->hasColumn($columnToFilter)) {
+            return $columnToFilter;
+        }
+
+        // filter_excludelowpop=nb_visits but the column name is still Metrics::INDEX_NB_VISITS in the table
+        $columnIdToName = Metrics::getMappingFromNameToId();
+        if (isset($columnIdToName[$columnToFilter])) {
+            $column = $columnIdToName[$columnToFilter];
+
+            if ($row->hasColumn($column)) {
+                return $column;
+            }
+        }
+
+        return $columnToFilter;
+    }
 }
-- 
GitLab