From 0123fee47f32026bde00370df24cc93379a6178b Mon Sep 17 00:00:00 2001
From: Thomas Steur <thomas.steur@gmail.com>
Date: Tue, 15 Oct 2013 20:38:34 +0000
Subject: [PATCH] added possibility to assign template vars

---
 core/Plugin/Visualization.php                      | 14 ++++++++++++++
 core/ViewDataTable/Graph.php                       |  2 +-
 core/ViewDataTable/Request.php                     |  3 ++-
 .../CoreVisualizations/Visualizations/Cloud.php    |  7 ++++---
 plugins/ExampleVisualization/SimpleTable.php       |  2 +-
 5 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/core/Plugin/Visualization.php b/core/Plugin/Visualization.php
index 17a2ccbc62..3dd741607e 100644
--- a/core/Plugin/Visualization.php
+++ b/core/Plugin/Visualization.php
@@ -40,6 +40,8 @@ class Visualization extends ViewDataTable
     const TEMPLATE_FILE = '';
     const CONFIGURE_VIEW_EVENT = 'Visualization.initView';
 
+    private $templateVars = array();
+
     final public function __construct($currentControllerAction, $apiMethodToRequestDataTable, $defaultReportProperties)
     {
         $templateFile = static::TEMPLATE_FILE;
@@ -96,6 +98,7 @@ class Visualization extends ViewDataTable
             $view->error = $loadingError;
         }
 
+        $view->assign($this->templateVars);
         $view->visualization = $this;
         $view->visualizationTemplate = static::TEMPLATE_FILE;
 
@@ -125,6 +128,17 @@ class Visualization extends ViewDataTable
         return $view;
     }
 
+    public function assignTemplateVar($vars, $value = null)
+    {
+        if (is_string($vars)) {
+            $this->templateVars[$vars] = $value;
+        } elseif (is_array($vars)) {
+            foreach ($vars as $key => $value) {
+                $this->templateVars[$key] = $value;
+            }
+        }
+    }
+
     protected function isThereDataToDisplay()
     {
         return true;
diff --git a/core/ViewDataTable/Graph.php b/core/ViewDataTable/Graph.php
index a509b2547b..07a8fe17c9 100644
--- a/core/ViewDataTable/Graph.php
+++ b/core/ViewDataTable/Graph.php
@@ -56,7 +56,7 @@ abstract class Graph extends Visualization
      */
     public function afterAllFilteresAreApplied()
     {
-        $this->selectable_rows = array_values($this->selectableRows);
+        $this->config->selectable_rows = array_values($this->selectableRows);
 
         $selectableColumns = $this->config->selectable_columns;
 
diff --git a/core/ViewDataTable/Request.php b/core/ViewDataTable/Request.php
index 4e6df3ad27..df495c46d0 100644
--- a/core/ViewDataTable/Request.php
+++ b/core/ViewDataTable/Request.php
@@ -21,7 +21,6 @@ use Piwik\Piwik;
 
 class Request
 {
-
     /**
      * @var null|\Piwik\Visualization\Request
      */
@@ -145,6 +144,8 @@ class Request
      */
     public static function shouldLoadExpanded()
     {
+        // TODO this is not the right class for this
+
         // if filter_column_recursive & filter_pattern_recursive are supplied, and flat isn't supplied
         // we have to load all the child subtables.
         return Common::getRequestVar('filter_column_recursive', false) !== false
diff --git a/plugins/CoreVisualizations/Visualizations/Cloud.php b/plugins/CoreVisualizations/Visualizations/Cloud.php
index 719bf7a5b8..a59bcaaf7d 100644
--- a/plugins/CoreVisualizations/Visualizations/Cloud.php
+++ b/plugins/CoreVisualizations/Visualizations/Cloud.php
@@ -58,8 +58,8 @@ class Cloud extends Visualization
         }
 
         $columnToDisplay = isset($this->config->columns_to_display[1]) ? $this->config->columns_to_display[1] : 'nb_visits';
+        $labelMetadata   = array();
 
-        $labelMetadata = array();
         foreach ($this->dataTable->getRows() as $row) {
             $logo = false;
             if ($this->config->display_logo_instead_of_label) {
@@ -75,13 +75,14 @@ class Cloud extends Visualization
 
             $this->addWord($label, $row->getColumn($columnToDisplay));
         }
+
         $cloudValues = $this->getCloudValues();
         foreach ($cloudValues as &$value) {
             $value['logoWidth'] = round(max(16, $value['percent']));
         }
 
-        $this->labelMetadata = $labelMetadata;
-        $this->cloudValues   = $cloudValues;
+        $this->assignTemplateVar('labelMetadata', $labelMetadata);
+        $this->assignTemplateVar('cloudValues', $cloudValues);
     }
 
     /**
diff --git a/plugins/ExampleVisualization/SimpleTable.php b/plugins/ExampleVisualization/SimpleTable.php
index 07e686e8fd..c5ad4312cb 100644
--- a/plugins/ExampleVisualization/SimpleTable.php
+++ b/plugins/ExampleVisualization/SimpleTable.php
@@ -31,7 +31,7 @@ class SimpleTable extends Visualization
      */
     public function init()
     {
-        $this->vizTitle = 'MyAwesomeTitle';
+        $this->assignTemplateVar('vizTitle', 'MyAwesomeTitle');
     }
 
     public function configureVisualization()
-- 
GitLab