diff --git a/core/DataTable/Filter/ExcludeLowPopulation.php b/core/DataTable/Filter/ExcludeLowPopulation.php index 27d19fa86b99cab309a4f553d6d57eb95aabd341..9e16cc0ef12dce04b8f1f4361820c26044d720a9 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; + } }