Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenaka Moorthi <benaka.moorthi@gmail.com>2013-09-19 06:57:14 +0400
committerBenaka Moorthi <benaka.moorthi@gmail.com>2013-09-19 06:58:14 +0400
commit6b906ed1444d904abc0f39cae0b7da5e5f22c74b (patch)
treefde35e43e21101590047892ecfa062e6dfe9cfaf
parenta513c0e7f8e6eeb373682f4f5b15f70b7ce65896 (diff)
Refs #4041, make all DataTableVisualizations derive from Piwik\View.
-rw-r--r--core/DataTableVisualization.php15
-rw-r--r--core/View.php20
-rw-r--r--core/Visualization/Graph.php5
-rw-r--r--plugins/CoreHome/templates/_dataTable.twig4
-rw-r--r--plugins/CoreVisualizations/JqplotDataGenerator/Chart.php2
-rw-r--r--plugins/CoreVisualizations/Visualizations/Cloud.php74
-rw-r--r--plugins/CoreVisualizations/Visualizations/HtmlTable.php18
-rw-r--r--plugins/CoreVisualizations/Visualizations/JqplotGraph.php38
-rw-r--r--plugins/CoreVisualizations/Visualizations/JqplotGraph/Pie.php18
-rw-r--r--plugins/CoreVisualizations/templates/_dataTableViz_htmlTable.twig2
-rw-r--r--plugins/CoreVisualizations/templates/_dataTableViz_jqplotGraph.twig3
-rw-r--r--plugins/Live/VisitorLog.php18
-rw-r--r--plugins/TreemapVisualization/Treemap.php22
-rw-r--r--plugins/TreemapVisualization/templates/_dataTableViz_treemap.twig2
14 files changed, 83 insertions, 158 deletions
diff --git a/core/DataTableVisualization.php b/core/DataTableVisualization.php
index bfab67dfd6..788ae50064 100644
--- a/core/DataTableVisualization.php
+++ b/core/DataTableVisualization.php
@@ -20,7 +20,7 @@ use Piwik\DataTable;
*
* TODO: must be more in depth
*/
-abstract class DataTableVisualization
+abstract class DataTableVisualization extends View
{
/**
* This event is used to gather all available DataTable visualizations. Callbacks
@@ -31,15 +31,6 @@ abstract class DataTableVisualization
const GET_AVAILABLE_EVENT = 'DataTableVisualization.getAvailable';
/**
- * Rendering function. Must return the view HTML.
- *
- * @param DataTable|DataTable\Map $dataTable The data.
- * @param array $properties The view properties.
- * @return string The visualization HTML.
- */
- //public abstract function render($dataTable, $properties); temporarily commented out
-
- /**
* Default implementation of getDefaultPropertyValues static function.
*
* @return array
@@ -120,11 +111,11 @@ abstract class DataTableVisualization
*/
public static function getVisualizationClassLineage($klass)
{
- $klasses = array_merge(array($klass), class_parents($klass, $autoload = false));
+ $klasses = array_merge(array($klass), array_values(class_parents($klass, $autoload = false)));
$idx = array_search('Piwik\\DataTableVisualization', $klasses);
if ($idx !== false) {
- unset($klasses[$idx]);
+ $klasses = array_slice($klasses, 0, $idx);
}
return array_reverse($klasses);
diff --git a/core/View.php b/core/View.php
index 65f6b14faf..72395a3598 100644
--- a/core/View.php
+++ b/core/View.php
@@ -57,6 +57,26 @@ class View implements ViewInterface
}
/**
+ * Returns the template filename.
+ *
+ * @return string
+ */
+ public function getTemplateFile()
+ {
+ return $this->template;
+ }
+
+ /**
+ * Returns the variables to bind to the template when rendering.
+ *
+ * @return array
+ */
+ public function getTemplateVars()
+ {
+ return $this->templateVars;
+ }
+
+ /**
* Directly assigns a variable to the view script.
* VAR names may not be prefixed with '_'.
*
diff --git a/core/Visualization/Graph.php b/core/Visualization/Graph.php
index ead67f3169..c47523bbbc 100644
--- a/core/Visualization/Graph.php
+++ b/core/Visualization/Graph.php
@@ -127,9 +127,12 @@ abstract class Graph extends DataTableVisualization
* Constructor.
*
* @param \Piwik\ViewDataTable $view
+ * @param string $template
*/
- public function __construct($view)
+ public function __construct($view, $template)
{
+ parent::__construct($template);
+
if ($view->show_goals) {
$view->translations['nb_conversions'] = Piwik_Translate('Goals_ColumnConversions');
$view->translations['revenue'] = Piwik_Translate('General_TotalRevenue');
diff --git a/plugins/CoreHome/templates/_dataTable.twig b/plugins/CoreHome/templates/_dataTable.twig
index e98ff87591..02b11804c4 100644
--- a/plugins/CoreHome/templates/_dataTable.twig
+++ b/plugins/CoreHome/templates/_dataTable.twig
@@ -1,5 +1,5 @@
{% if properties.show_visualization_only %}
- {{ visualization.render(dataTable, properties)|raw }}
+ {% include visualization.getTemplateFile() with visualization.getTemplateVars() %}
{%- else -%}
{% set summaryRowId = constant('Piwik\\DataTable::ID_SUMMARY_ROW') %}{# ID_SUMMARY_ROW #}
@@ -26,7 +26,7 @@
{% endif %}
</div>
{% else %}
- {{ visualization.render(dataTable, properties, javascriptVariablesToSet)|raw }}
+ {% include visualization.getTemplateFile() with visualization.getTemplateVars() %}
{% endif %}
{% if properties.show_footer %}
diff --git a/plugins/CoreVisualizations/JqplotDataGenerator/Chart.php b/plugins/CoreVisualizations/JqplotDataGenerator/Chart.php
index b3253b340c..9590c7ef04 100644
--- a/plugins/CoreVisualizations/JqplotDataGenerator/Chart.php
+++ b/plugins/CoreVisualizations/JqplotDataGenerator/Chart.php
@@ -117,6 +117,6 @@ class Chart
'data' => &$this->data
);
- return Common::json_encode($data);
+ return $data;
}
} \ No newline at end of file
diff --git a/plugins/CoreVisualizations/Visualizations/Cloud.php b/plugins/CoreVisualizations/Visualizations/Cloud.php
index 6b016c38c5..8542416f33 100644
--- a/plugins/CoreVisualizations/Visualizations/Cloud.php
+++ b/plugins/CoreVisualizations/Visualizations/Cloud.php
@@ -44,6 +44,40 @@ class Cloud extends DataTableVisualization
protected $wordsArray = array();
public $truncatingLimit = 50;
+ public function __construct($view)
+ {
+ parent::__construct("@CoreVisualizations/_dataTableViz_tagCloud.twig");
+
+ $self = $this;
+ $view->after_data_loaded_functions[] = function ($dataTable, $view) use ($self) {
+ $columnToDisplay = $view->columns_to_display[1];
+
+ $labelMetadata = array();
+ foreach ($dataTable->getRows() as $row) {
+ $logo = false;
+ if ($view->visualization_properties->display_logo_instead_of_label) {
+ $logo = $row->getMetadata('logo');
+ }
+
+ $label = $row->getColumn('label');
+
+ $labelMetadata[$label] = array(
+ 'logo' => $logo,
+ 'url' => $row->getMetadata('url'),
+ );
+
+ $self->addWord($label, $row->getColumn($columnToDisplay));
+ }
+ $cloudValues = $self->getCloudValues();
+ foreach ($cloudValues as &$value) {
+ $value['logoWidth'] = round(max(16, $value['percent']));
+ }
+
+ $self->labelMetadata = $labelMetadata;
+ $self->cloudValues = $cloudValues;
+ };
+ }
+
public static function getDefaultPropertyValues()
{
return array(
@@ -73,46 +107,6 @@ class Cloud extends DataTableVisualization
}
}
- /**
- * Renders this visualization.
- *
- * @param DataTable $dataTable
- * @param array $properties
- * @return string
- */
- public function render($dataTable, $properties)
- {
- $view = new View("@CoreVisualizations/_dataTableViz_tagCloud.twig");
- $view->properties = $properties;
-
- $columnToDisplay = $properties['columns_to_display'][1];
-
- $labelMetadata = array();
- foreach ($dataTable->getRows() as $row) {
- $logo = false;
- if ($properties['visualization_properties']->display_logo_instead_of_label) {
- $logo = $row->getMetadata('logo');
- }
-
- $label = $row->getColumn('label');
-
- $labelMetadata[$label] = array(
- 'logo' => $logo,
- 'url' => $row->getMetadata('url'),
- );
-
- $this->addWord($label, $row->getColumn($columnToDisplay));
- }
- $cloudValues = $this->getCloudValues();
- foreach ($cloudValues as &$value) {
- $value['logoWidth'] = round(max(16, $value['percent']));
- }
- $view->labelMetadata = $labelMetadata;
- $view->cloudValues = $cloudValues;
-
- return $view->render();
- }
-
private function getCloudValues()
{
$this->shuffleCloud();
diff --git a/plugins/CoreVisualizations/Visualizations/HtmlTable.php b/plugins/CoreVisualizations/Visualizations/HtmlTable.php
index 2b98761d8a..c808a0471d 100644
--- a/plugins/CoreVisualizations/Visualizations/HtmlTable.php
+++ b/plugins/CoreVisualizations/Visualizations/HtmlTable.php
@@ -152,6 +152,8 @@ class HtmlTable extends DataTableVisualization
*/
public function __construct($view)
{
+ parent::__construct("@CoreVisualizations/_dataTableViz_htmlTable.twig");
+
if (Common::getRequestVar('idSubtable', false)
&& $view->visualization_properties->show_embedded_subtable
) {
@@ -167,22 +169,6 @@ class HtmlTable extends DataTableVisualization
}
}
- /**
- * Renders this visualization.
- *
- * @param DataTable $dataTable
- * @param array $properties View Properties.
- * @return string
- */
- public function render($dataTable, $properties) // TODO: $properties should be a viewdatatable, I think.
- {
- $view = new View("@CoreVisualizations/_dataTableViz_htmlTable.twig");
- $view->properties = $properties;
- $view->dataTable = $dataTable;
- $view->idSubtable = Common::getRequestVar('idSubtable', false);
- return $view->render();
- }
-
public static function getDefaultPropertyValues()
{
$defaults = array(
diff --git a/plugins/CoreVisualizations/Visualizations/JqplotGraph.php b/plugins/CoreVisualizations/Visualizations/JqplotGraph.php
index 95cbf7610e..4059df0d7c 100644
--- a/plugins/CoreVisualizations/Visualizations/JqplotGraph.php
+++ b/plugins/CoreVisualizations/Visualizations/JqplotGraph.php
@@ -64,7 +64,7 @@ class JqplotGraph extends Graph
*/
public function __construct($view)
{
- parent::__construct($view);
+ parent::__construct($view, $template = "@CoreVisualizations/_dataTableViz_jqplotGraph.twig");
// do not sort if sorted column was initially "label" or eg. it would make "Visits by Server time" not pretty
if ($view->filter_sort_column != 'label') {
@@ -104,43 +104,11 @@ class JqplotGraph extends Graph
)
));
}
-
- /**
- * Renders this visualization.
- *
- * @param DataTable $dataTable
- * @param array $properties View Properties.
- * @return string
- */
- public function render($dataTable, $properties)
- {
- $view = new View("@CoreVisualizations/_dataTableViz_jqplotGraph.twig");
- $view->properties = $properties;
- $view->dataTable = $dataTable;
- $view->data = $this->getGraphData($dataTable, $properties);
- return $view->render();
- }
- /**
- * Generats JQPlot graph data for a DataTable.
- */
- private function getGraphData($dataTable, $properties)
+ public function getGraphData($dataTable, $properties)
{
- $properties = array_merge($properties, $properties['request_parameters_to_modify']);
$dataGenerator = $this->makeDataGenerator($properties);
-
- $jsonData = $dataGenerator->generate($dataTable);
- return str_replace(array("\r", "\n"), '', $jsonData);
- }
-
- /**
- * Returns a JqplotDataGenerator for the given graph_type in $properties
- * @param array $properties
- * @return JqplotDataGenerator
- */
- protected function makeDataGenerator($properties)
- {
- return JqplotDataGenerator::factory($properties['graph_type'], $properties);
+ return $dataGenerator->generate($dataTable);
}
}
diff --git a/plugins/CoreVisualizations/Visualizations/JqplotGraph/Pie.php b/plugins/CoreVisualizations/Visualizations/JqplotGraph/Pie.php
index 398c021a3b..0f2bf2737f 100644
--- a/plugins/CoreVisualizations/Visualizations/JqplotGraph/Pie.php
+++ b/plugins/CoreVisualizations/Visualizations/JqplotGraph/Pie.php
@@ -26,21 +26,15 @@ class Pie extends JqplotGraph
parent::__construct($view);
$view->visualization_properties->show_all_ticks = true;
$view->datatable_js_type = 'JqplotPieGraphDataTable';
- }
- public function render($dataTable, $properties)
- {
// make sure only one non-label column is displayed
- $metricColumn = false;
- foreach ($properties['columns_to_display'] as $column) {
- if ($column != 'label') {
- $metricColumn = $column;
- break;
+ $view->after_data_loaded_functions[] = function ($dataTable) use ($view) {
+ $metricColumn = reset($view->columns_to_display);
+ if ($metricColumn == 'label') {
+ $metricColumn = next($view->columns_to_display);
}
- }
- $properties['columns_to_display'] = array($metricColumn ?: 'nb_visits');
-
- return parent::render($dataTable, $properties);
+ $view->columns_to_display = array($metricColumn ?: 'nb_visits');
+ };
}
public static function getDefaultPropertyValues()
diff --git a/plugins/CoreVisualizations/templates/_dataTableViz_htmlTable.twig b/plugins/CoreVisualizations/templates/_dataTableViz_htmlTable.twig
index 67a0d71c0f..bcf7afedd8 100644
--- a/plugins/CoreVisualizations/templates/_dataTableViz_htmlTable.twig
+++ b/plugins/CoreVisualizations/templates/_dataTableViz_htmlTable.twig
@@ -1,7 +1,7 @@
{%- set subtablesAreDisabled = properties.visualization_properties.show_goals_columns|default(false)
and properties.visualization_properties.disable_subtable_when_show_goals|default(false) -%}
{%- set showingEmbeddedSubtable = properties.visualization_properties.show_embedded_subtable is not empty
- and idSubtable is not empty -%}
+ and idSubtable|default(false) -%}
{% if error is defined %}
{{ error.message }}
{% else %}
diff --git a/plugins/CoreVisualizations/templates/_dataTableViz_jqplotGraph.twig b/plugins/CoreVisualizations/templates/_dataTableViz_jqplotGraph.twig
index a87fcb6123..5dfd78b1f3 100644
--- a/plugins/CoreVisualizations/templates/_dataTableViz_jqplotGraph.twig
+++ b/plugins/CoreVisualizations/templates/_dataTableViz_jqplotGraph.twig
@@ -1,4 +1,3 @@
<div class="jqplot-graph">
- <div class="piwik-graph" data-data="{{ data|e('html') }}">
- </div>
+ <div class="piwik-graph" data-data="{{ visualization.getGraphData(dataTable, properties)|json_encode }}"></div>
</div> \ No newline at end of file
diff --git a/plugins/Live/VisitorLog.php b/plugins/Live/VisitorLog.php
index daa09af391..b8fbd2431b 100644
--- a/plugins/Live/VisitorLog.php
+++ b/plugins/Live/VisitorLog.php
@@ -30,22 +30,8 @@ class VisitorLog extends DataTableVisualization
*/
public function __construct($view)
{
- $view->datatable_js_type = 'VisitorLog';
- }
+ parent::__construct("@Live/_dataTableViz_visitorLog.twig");
- /**
- * Renders this visualization.
- *
- * @param DataTable $dataTable
- * @param array $properties View Properties.
- * @return string
- */
- public function render($dataTable, $properties, $javascriptVariablesToSet)
- {
- $view = new View("@Live/_dataTableViz_visitorLog.twig");
- $view->properties = $properties;
- $view->dataTable = $dataTable;
- $view->javascriptVariablesToSet = $javascriptVariablesToSet;
- return $view->render();
+ $view->datatable_js_type = 'VisitorLog';
}
} \ No newline at end of file
diff --git a/plugins/TreemapVisualization/Treemap.php b/plugins/TreemapVisualization/Treemap.php
index a5c0b217f5..721151211f 100644
--- a/plugins/TreemapVisualization/Treemap.php
+++ b/plugins/TreemapVisualization/Treemap.php
@@ -54,7 +54,7 @@ class Treemap extends Graph
// we determine the elements count dynamically based on available width/height
$view->visualization_properties->max_graph_elements = false;
- parent::__construct($view);
+ parent::__construct($view, '@TreemapVisualization/_dataTableViz_treemap.twig');
$view->datatable_js_type = 'TreemapDataTable';
$view->show_pagination_control = false;
@@ -91,22 +91,6 @@ class Treemap extends Graph
}
/**
- * Renders the treemap.
- *
- * @param \Piwik\DataTable $dataTable
- * @param array $properties
- *
- * @return string
- */
- public function render($dataTable, $properties)
- {
- $view = new View('@TreemapVisualization/_dataTableViz_treemap.twig');
- $view->graphData = $this->getGraphData($dataTable, $properties);
- $view->properties = $properties;
- return $view->render();
- }
-
- /**
* Returns the default view property values for this visualization.
*
* @return array
@@ -132,7 +116,7 @@ class Treemap extends Graph
return $this->getCurrentData($dataTable)->getRowsCount() != 0;
}
- private function getGraphData($dataTable, $properties)
+ public function getGraphData($dataTable, $properties)
{
$metric = $this->getMetricToGraph($properties['columns_to_display']);
$translation = empty($properties['translations'][$metric]) ? $metric : $properties['translations'][$metric];
@@ -143,7 +127,7 @@ class Treemap extends Graph
$generator->showEvolutionValues();
}
- return Common::json_encode($generator->generate($dataTable));
+ return $generator->generate($dataTable);
}
public function getMetricToGraph($columnsToDisplay)
diff --git a/plugins/TreemapVisualization/templates/_dataTableViz_treemap.twig b/plugins/TreemapVisualization/templates/_dataTableViz_treemap.twig
index 4762833ea1..00abefd294 100644
--- a/plugins/TreemapVisualization/templates/_dataTableViz_treemap.twig
+++ b/plugins/TreemapVisualization/templates/_dataTableViz_treemap.twig
@@ -1,3 +1,3 @@
-<div class="infoviz-treemap" data-data="{{ graphData }}">
+<div class="infoviz-treemap" data-data="{{ visualization.getGraphData(dataTable, properties)|json_encode }}">
<img class="infoviz-treemap-zoom-out" style="visibility:hidden;" src="plugins/Zeitgeist/images/zoom-out.png"/>
</div> \ No newline at end of file