diff --git a/core/API/DataTablePostProcessor.php b/core/API/DataTablePostProcessor.php index ddff42fd059e3dd4808a8d7e7e25d7c135c1ff90..3e6deae6b3ca18d824fbf06a19274748e8bab4df 100644 --- a/core/API/DataTablePostProcessor.php +++ b/core/API/DataTablePostProcessor.php @@ -195,12 +195,6 @@ class DataTablePostProcessor // after queued filters are run so processed metrics can be removed, too) $hideColumns = Common::getRequestVar('hideColumns', '', 'string', $this->request); $showColumns = Common::getRequestVar('showColumns', '', 'string', $this->request); - if (empty($showColumns)) { - // if 'columns' is used, we remove all temporary metrics by showing only the columns specified in - // 'columns' - $showColumns = Common::getRequestVar('columns', '', 'string', $this->request); - } - if (!empty($hideColumns) || !empty($showColumns) ) { diff --git a/plugins/Actions/API.php b/plugins/Actions/API.php index 7fcde2f14461586a328ad3ee806363f6d3e5d84e..4b730c0c07b2a0e65116b7082e5393cbdb6ead8d 100644 --- a/plugins/Actions/API.php +++ b/plugins/Actions/API.php @@ -57,15 +57,15 @@ class API extends \Piwik\Plugin\API Piwik::checkUserHasViewAccess($idSite); $archive = Archive::build($idSite, $period, $date, $segment); - $columns = Piwik::getArrayFromApiParameter($columns); - $columns = Report::factory("Actions", "get")->getMetricsRequiredForReport($allColumns = null, $columns); + $requestedColumns = Piwik::getArrayFromApiParameter($columns); + $columns = Report::factory("Actions", "get")->getMetricsRequiredForReport($allColumns = null, $requestedColumns); $inDbColumnNames = array_map(function ($value) { return 'Actions_' . $value; }, $columns); $dataTable = $archive->getDataTableFromNumeric($inDbColumnNames); + $dataTable->deleteColumns(array_diff($requestedColumns, $columns)); $newNameMapping = array_combine($inDbColumnNames, $columns); $dataTable->filter('ReplaceColumnNames', array($newNameMapping)); - return $dataTable; } diff --git a/plugins/Goals/API.php b/plugins/Goals/API.php index b807a024cefb9dd25861dac97f41a2dcfd41ec56..22bfcb5788e7aeb395b43b4427c0389dabdbe402 100644 --- a/plugins/Goals/API.php +++ b/plugins/Goals/API.php @@ -333,8 +333,8 @@ class API extends \Piwik\Plugin\API $allMetrics = Goals::getGoalColumns($idGoal); - $columns = Piwik::getArrayFromApiParameter($columns); - $columnsToGet = Report::factory("Goals", "get")->getMetricsRequiredForReport($allMetrics, $columns); + $requestedColumns = Piwik::getArrayFromApiParameter($columns); + $columnsToGet = Report::factory("Goals", "get")->getMetricsRequiredForReport($allMetrics, $requestedColumns); $inDbMetricNames = array_map(function ($value) use ($idGoal) { return Archiver::getRecordName($value, $idGoal); }, $columnsToGet); $dataTable = $archive->getDataTableFromNumeric($inDbMetricNames); @@ -342,12 +342,15 @@ class API extends \Piwik\Plugin\API $newNameMapping = array_combine($inDbMetricNames, $columnsToGet); $dataTable->filter('ReplaceColumnNames', array($newNameMapping)); + $dataTable->deleteColumns(array_diff($requestedColumns, $columnsToGet)); + // TODO: this should be in Goals/Get.php but it depends on idGoal parameter which isn't always in _GET (ie, // it's not in ProcessedReport.php). more refactoring must be done to report class before this can be // corrected. - if ((in_array('avg_order_revenue', $columns) - || empty($columns)) - && $idGoal === GoalManager::IDGOAL_ORDER + if ((in_array('avg_order_revenue', $requestedColumns) + || empty($requestedColumns)) + && ($idGoal === GoalManager::IDGOAL_ORDER + || $idGoal === GoalManager::IDGOAL_CART) ) { $dataTable->filter(function (DataTable $table) { $extraProcessedMetrics = $table->getMetadata(DataTable::EXTRA_PROCESSED_METRICS_METADATA_NAME); diff --git a/plugins/VisitsSummary/API.php b/plugins/VisitsSummary/API.php index 81fd49f8df7d9b92fb66eebd491dd62e2bf2b16b..0530fd7ae3a8107a07163056926116f8766559d1 100644 --- a/plugins/VisitsSummary/API.php +++ b/plugins/VisitsSummary/API.php @@ -28,12 +28,13 @@ class API extends \Piwik\Plugin\API Piwik::checkUserHasViewAccess($idSite); $archive = Archive::build($idSite, $period, $date, $segment); - $columns = Piwik::getArrayFromApiParameter($columns); + $requestedColumns = Piwik::getArrayFromApiParameter($columns); $report = Report::factory("VisitsSummary", "get"); - $columns = $report->getMetricsRequiredForReport($this->getCoreColumns($period), $columns); + $columns = $report->getMetricsRequiredForReport($this->getCoreColumns($period), $requestedColumns); $dataTable = $archive->getDataTableFromNumeric($columns); + $dataTable->deleteColumns(array_diff($requestedColumns, $columns)); return $dataTable; } diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_csv__API.get_month.csv b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_csv__API.get_month.csv index 95ce6d8b142f94396d959d9568f9892c09e2d7a3..9ca1f08519c5d1c20ebcdf7ad4a884963a4c37a1 100644 Binary files a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_csv__API.get_month.csv and b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_csv__API.get_month.csv differ