diff --git a/core/API/DataTableGenericFilter.php b/core/API/DataTableGenericFilter.php index d7cacc0c2040eee4ace7bad011641050000901dc..111453520c87984b502f944f2af0d1c002c7ce48 100644 --- a/core/API/DataTableGenericFilter.php +++ b/core/API/DataTableGenericFilter.php @@ -82,14 +82,14 @@ class DataTableGenericFilter 'filter_sort_column' => array('string'), 'filter_sort_order' => array('string', 'desc'), ), + 'Truncate' => array( + 'filter_truncate' => array('integer'), + ), 'Limit' => array( 'filter_offset' => array('integer', '0'), 'filter_limit' => array('integer'), 'keep_summary_row' => array('integer', '0'), ), - 'Truncate' => array( - 'filter_truncate' => array('integer'), - ), ); } diff --git a/plugins/TreemapVisualization/API.php b/plugins/TreemapVisualization/API.php index d7f080ab226b5179416b6a47afa6a5dd332e21af..0ddc2e3af1e189ad6b9e5a4ccfa0b8e7df5a1ce5 100644 --- a/plugins/TreemapVisualization/API.php +++ b/plugins/TreemapVisualization/API.php @@ -40,7 +40,7 @@ class API * @param int|bool $show_evolution_values Whether to calculate evolution values for each row or not. * @return array */ - public function getTreemapData($apiMethod, $column, $period, $date, $show_evolution_values = false) + public function getTreemapData($apiMethod, $column, $period, $date, $truncateAfter = false, $show_evolution_values = false) { if ($period == 'range') { $show_evolution_values = false; @@ -65,6 +65,12 @@ class API if ($show_evolution_values) { $generator->showEvolutionValues(); } + + $truncateAfter = (int)$truncateAfter; + if ($truncateAfter > 0) { + $generator->setTruncateAfter($truncateAfter); + } + return $generator->generate($dataTable); } } \ No newline at end of file diff --git a/plugins/TreemapVisualization/Treemap.php b/plugins/TreemapVisualization/Treemap.php index f86c5bd2b34f484393e6d72ec5a7320211215e86..601408da1d29799af1804f6458b1b167682aa189 100644 --- a/plugins/TreemapVisualization/Treemap.php +++ b/plugins/TreemapVisualization/Treemap.php @@ -134,6 +134,11 @@ class Treemap extends Graph $generator->showEvolutionValues(); } + $truncateAfter = Common::getRequestVar('truncateAfter', false, 'int'); + if ($truncateAfter > 0) { + $generator->setTruncateAfter($truncateAfter); + } + return Common::json_encode($generator->generate($dataTable)); } diff --git a/plugins/TreemapVisualization/TreemapDataGenerator.php b/plugins/TreemapVisualization/TreemapDataGenerator.php index 1eee7ab53c972d5c5ae17250b228cc7ccc539925..602be755c81e70042aaf0124cc3bc4f978e5f318 100644 --- a/plugins/TreemapVisualization/TreemapDataGenerator.php +++ b/plugins/TreemapVisualization/TreemapDataGenerator.php @@ -64,6 +64,14 @@ class TreemapDataGenerator */ private $showEvolutionValues = false; + /** + * The row offset to apply an additional truncation to (the first truncation occurs in + * DataTableGenericFilter). + * + * @var int + */ + private $truncateAfter = false; + /** * Constructor. * @@ -104,6 +112,16 @@ class TreemapDataGenerator $this->showEvolutionValues = true; } + /** + * Sets the row offset to apply additional truncation after. + * + * @param int $truncateAfter + */ + public function setTruncateAfter($truncateAfter) + { + $this->truncateAfter = $truncateAfter; + } + /** * Generates an array that can be encoded as JSON and used w/ the JavaScript Infovis Toolkit. * @@ -112,6 +130,11 @@ class TreemapDataGenerator */ public function generate($dataTable) { + // handle extra truncation + if ($this->truncateAfter) { + $dataTable->filter('Truncate', array($this->truncateAfter)); + } + // if showEvolutionValues is true, $dataTable must be a DataTable\Map w/ two child tables $pastData = false; if ($this->showEvolutionValues) { diff --git a/plugins/TreemapVisualization/javascripts/treemapViz.js b/plugins/TreemapVisualization/javascripts/treemapViz.js index 42a59063145bea91e50975b7964fba89d8239d6b..30329b56d8bdcc44e534e7b6ae7c1b06bc6d8222 100644 --- a/plugins/TreemapVisualization/javascripts/treemapViz.js +++ b/plugins/TreemapVisualization/javascripts/treemapViz.js @@ -430,7 +430,7 @@ apiMethod: this.param.module + '.' + this.param.action, // TODO: will this work for all subtables? format: 'json', column: this.param.columns, - filter_truncate: this.props.max_graph_elements - 1, + truncateAfter: this.props.max_graph_elements - 1, filter_limit: -1, expanded: 1, depth: this.props.depth || 1,