diff options
-rw-r--r-- | core/DataTableVisualization.php | 15 | ||||
-rw-r--r-- | core/View.php | 20 | ||||
-rw-r--r-- | core/Visualization/Graph.php | 5 | ||||
-rw-r--r-- | plugins/CoreHome/templates/_dataTable.twig | 4 | ||||
-rw-r--r-- | plugins/CoreVisualizations/JqplotDataGenerator/Chart.php | 2 | ||||
-rw-r--r-- | plugins/CoreVisualizations/Visualizations/Cloud.php | 74 | ||||
-rw-r--r-- | plugins/CoreVisualizations/Visualizations/HtmlTable.php | 18 | ||||
-rw-r--r-- | plugins/CoreVisualizations/Visualizations/JqplotGraph.php | 38 | ||||
-rw-r--r-- | plugins/CoreVisualizations/Visualizations/JqplotGraph/Pie.php | 18 | ||||
-rw-r--r-- | plugins/CoreVisualizations/templates/_dataTableViz_htmlTable.twig | 2 | ||||
-rw-r--r-- | plugins/CoreVisualizations/templates/_dataTableViz_jqplotGraph.twig | 3 | ||||
-rw-r--r-- | plugins/Live/VisitorLog.php | 18 | ||||
-rw-r--r-- | plugins/TreemapVisualization/Treemap.php | 22 | ||||
-rw-r--r-- | plugins/TreemapVisualization/templates/_dataTableViz_treemap.twig | 2 |
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 |