From 464be65c8e43f70c643cd589ac54da28d12780c2 Mon Sep 17 00:00:00 2001
From: sgiehl <stefan@piwik.org>
Date: Sun, 20 Mar 2016 12:57:41 +0100
Subject: [PATCH] handle PivotBy within HtmlTable visualization to fix side
 effects

---
 .../CoreVisualizations/CoreVisualizations.php | 20 +----------
 .../Visualizations/HtmlTable.php              | 19 ++++++++++
 .../Visualizations/HtmlTable/PivotBy.php      | 36 -------------------
 3 files changed, 20 insertions(+), 55 deletions(-)
 delete mode 100644 plugins/CoreVisualizations/Visualizations/HtmlTable/PivotBy.php

diff --git a/plugins/CoreVisualizations/CoreVisualizations.php b/plugins/CoreVisualizations/CoreVisualizations.php
index 9a5f88e7ec..0aec35fb3e 100644
--- a/plugins/CoreVisualizations/CoreVisualizations.php
+++ b/plugins/CoreVisualizations/CoreVisualizations.php
@@ -29,8 +29,7 @@ class CoreVisualizations extends \Piwik\Plugin
             'AssetManager.getStylesheetFiles'        => 'getStylesheetFiles',
             'AssetManager.getJavaScriptFiles'        => 'getJsFiles',
             'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys',
-            'UsersManager.deleteUser'                => 'deleteUser',
-            'ViewDataTable.addViewDataTable'         => 'addViewDataTable'
+            'UsersManager.deleteUser'                => 'deleteUser'
         );
     }
 
@@ -39,23 +38,6 @@ class CoreVisualizations extends \Piwik\Plugin
         ViewDataTableManager::clearUserViewDataTableParameters($userLogin);
     }
 
-    public function addViewDataTable(&$viewDataTable)
-    {
-        // Both are the same HtmlTable, just the Pivot one has some extra logic in case Pivot is used. 
-        // We don't want to use the same HtmlTable twice in the UI. Therefore we always need to remove one.
-        if (Common::getRequestVar('pivotBy', '')) {
-            $tableToRemove = 'Visualizations\HtmlTable';
-        } else {
-            $tableToRemove = 'HtmlTable\PivotBy';
-        }
-
-        foreach ($viewDataTable as $index => $table) {
-            if (Common::stringEndsWith($table, $tableToRemove)) {
-                unset($viewDataTable[$index]);
-            }
-        }
-    }
-
     public function getStylesheetFiles(&$stylesheets)
     {
         $stylesheets[] = "plugins/CoreVisualizations/stylesheets/dataTableVisualizations.less";
diff --git a/plugins/CoreVisualizations/Visualizations/HtmlTable.php b/plugins/CoreVisualizations/Visualizations/HtmlTable.php
index 66cb4c26e9..dff8aa3e7a 100644
--- a/plugins/CoreVisualizations/Visualizations/HtmlTable.php
+++ b/plugins/CoreVisualizations/Visualizations/HtmlTable.php
@@ -70,6 +70,25 @@ class HtmlTable extends Visualization
             $dataTable = $request->process();
             $this->assignTemplateVar('siteSummary', $dataTable);
         }
+
+        if ($this->isPivoted()) {
+            $this->config->columns_to_display = $this->dataTable->getColumns();
+        }
+    }
+
+    public function beforeGenericFiltersAreAppliedToLoadedDataTable()
+    {
+        if ($this->isPivoted()) {
+            $this->config->columns_to_display = $this->dataTable->getColumns();
+
+            $this->dataTable->applyQueuedFilters();
+        }
+
+        parent::beforeGenericFiltersAreAppliedToLoadedDataTable();
     }
 
+    protected function isPivoted()
+    {
+        return $this->requestConfig->pivotBy || Common::getRequestVar('pivotBy', '');
+    }
 }
diff --git a/plugins/CoreVisualizations/Visualizations/HtmlTable/PivotBy.php b/plugins/CoreVisualizations/Visualizations/HtmlTable/PivotBy.php
deleted file mode 100644
index 1703988599..0000000000
--- a/plugins/CoreVisualizations/Visualizations/HtmlTable/PivotBy.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-/**
- * Piwik - free/libre analytics platform
- *
- * @link http://piwik.org
- * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- *
- */
-
-namespace Piwik\Plugins\CoreVisualizations\Visualizations\HtmlTable;
-
-use Piwik\DataTable;
-use Piwik\Plugins\CoreVisualizations\Visualizations\HtmlTable;
-use Piwik\View;
-
-/**
- * DataTable Visualization that derives from HtmlTable and sets show_extra_columns to true.
- */
-class PivotBy extends HtmlTable
-{
-    public function beforeGenericFiltersAreAppliedToLoadedDataTable()
-    {
-        $this->config->columns_to_display = $this->dataTable->getColumns();
-
-        $this->dataTable->applyQueuedFilters();
-
-        parent::beforeGenericFiltersAreAppliedToLoadedDataTable();
-    }
-
-    public function beforeRender()
-    {
-        parent::beforeRender();
-
-        $this->config->columns_to_display = $this->dataTable->getColumns();
-    }
-}
-- 
GitLab