From c08f6c1cc37ad1ab1ccceb6e7df5f63f05fcd49a Mon Sep 17 00:00:00 2001
From: Benaka Moorthi <benaka.moorthi@gmail.com>
Date: Fri, 20 Sep 2013 21:14:23 -0400
Subject: [PATCH] Refs #4077, fix bug with zoom out button toggling and make
 sure treemap icon is not displayed on evolution graph.

---
 core/ViewDataTable.php                        |  7 +++----
 .../TreemapVisualization.php                  | 19 ++++++++++++++++++-
 .../javascripts/treemapViz.js                 | 11 ++++++++++-
 3 files changed, 31 insertions(+), 6 deletions(-)

diff --git a/core/ViewDataTable.php b/core/ViewDataTable.php
index 0d80148aae..7a4487b5e0 100644
--- a/core/ViewDataTable.php
+++ b/core/ViewDataTable.php
@@ -681,7 +681,7 @@ class ViewDataTable
     /**
      * @return string URL to call the API, eg. "method=Referers.getKeywords&period=day&date=yesterday"...
      */
-    protected function getRequestArray()
+    public function getRequestArray()
     {
         // we prepare the array to give to the API Request
         // we setup the method and format variable
@@ -1057,11 +1057,10 @@ class ViewDataTable
 
     protected function buildView()
     {
-        Piwik_PostEvent(self::CONFIGURE_VIEW_EVENT, array($this));
-
         $visualization = new $this->visualizationClass($this);
+        Piwik_PostEvent(self::CONFIGURE_VIEW_EVENT, array($this));
         $this->overrideViewProperties();
-
+        
         try {
             $this->loadDataTableFromAPI();
             $this->postDataTableLoadedFromAPI();
diff --git a/plugins/TreemapVisualization/TreemapVisualization.php b/plugins/TreemapVisualization/TreemapVisualization.php
index 306aa948a0..eb8c09c39a 100644
--- a/plugins/TreemapVisualization/TreemapVisualization.php
+++ b/plugins/TreemapVisualization/TreemapVisualization.php
@@ -11,6 +11,7 @@
 
 namespace Piwik\Plugins\TreemapVisualization;
 
+use Piwik\Period;
 use Piwik\Common;
 
 /**
@@ -43,7 +44,7 @@ class TreemapVisualization extends \Piwik\Plugin
     public function getListHooksRegistered()
     {
         return array(
-            'AssetManager.getStylesheetFiles'            => 'getStylesheetFiles',
+            'AssetManager.getStylesheetFiles'     => 'getStylesheetFiles',
             'AssetManager.getJsFiles'             => 'getJsFiles',
             'DataTableVisualization.getAvailable' => 'getAvailableDataTableVisualizations',
             'ViewDataTable.configureReportView'   => 'configureReportViewForActions'
@@ -76,6 +77,22 @@ class TreemapVisualization extends \Piwik\Plugin
 
         // make sure treemap is shown on actions reports
         if ($module === 'Actions') {
+            if ($view->getViewDataTableId() != Treemap::ID) {
+                // make sure we're looking at data that the treemap visualization can use (a single datatable)
+                // TODO: this is truly ugly code. need to think up an abstraction that can allow us to describe the
+                //       problem...
+                $requestArray = $view->getRequestArray() + $_GET + $_POST;
+                $date = Common::getRequestVar('date', null, 'string', $requestArray);
+                $period = Common::getRequestVar('period', null, 'string', $requestArray);
+                $idSite = Common::getRequestVar('idSite', null, 'string', $requestArray);
+                if (Period::isMultiplePeriod($date, $period)
+                    || strpos($idSite, ',') !== false
+                    || $idSite == 'all'
+                ) {
+                    return;
+                }
+            }
+
             $view->show_all_views_icons = true;
             $view->show_bar_chart = false;
             $view->show_pie_chart = false;
diff --git a/plugins/TreemapVisualization/javascripts/treemapViz.js b/plugins/TreemapVisualization/javascripts/treemapViz.js
index a3ba92d388..51e19c9690 100644
--- a/plugins/TreemapVisualization/javascripts/treemapViz.js
+++ b/plugins/TreemapVisualization/javascripts/treemapViz.js
@@ -415,7 +415,16 @@
          * Show/hide the zoom out button based on the currently selected node.
          */
         _toggleZoomOut: function (toggle) {
-            $('.infoviz-treemap-zoom-out', this.$element).css('visibility', toggle || !this.treemap.clickedNode ? 'visible' : 'hidden');
+            var toggle = toggle || !this._isFirstLevelNode(this.treemap.clickedNode);
+            $('.infoviz-treemap-zoom-out', this.$element).css('visibility', toggle ? 'visible' : 'hidden');
+        },
+
+        /**
+         * Returns true if node is a child of the root node, false if it represents a subtable row.
+         */
+        _isFirstLevelNode: function (node) {
+            var parent = node.getParents()[0];
+            return !parent || parent.id.indexOf('treemap-root') != -1;
         },
 
         /**
-- 
GitLab