diff --git a/core/DataTable/Array.php b/core/DataTable/Array.php index 65b1133ff04dbd672a217f34492f57826892d867..e07867dfc2f9aa6ce00de6998c87d3fb18b754d9 100644 --- a/core/DataTable/Array.php +++ b/core/DataTable/Array.php @@ -408,4 +408,25 @@ class Piwik_DataTable_Array $newTableArray->setKeyName($this->getKeyName()); return $newTableArray; } + + /** + * Returns the intersection of cildrends' meta data arrays + * + * @param string $name The metadata name. + * @return mixed + */ + public function getMetadataIntersectArray( $name ) + { + $data = array(); + foreach ($this->getArray() as $childTable) + { + $childData = $childTable->getMetadata($name); + if (is_array($childData)) + { + $data = array_intersect($data, $childData); + } + } + return array_values($data); + } + } diff --git a/core/ViewDataTable.php b/core/ViewDataTable.php index 33ab179cf85c093e0d1fc309d89f853ae1ebfa40..e433b6abf8a1b76c7d37fa6b830c740cf51f2957 100644 --- a/core/ViewDataTable.php +++ b/core/ViewDataTable.php @@ -1281,7 +1281,11 @@ abstract class Piwik_ViewDataTable $this->columnsToDisplay = array_filter($this->columnsToDisplay); - $emptyColumns = $this->dataTable->getMetadata(Piwik_DataTable::EMPTY_COLUMNS_METADATA_NAME); + if ($this->dataTable instanceof Piwik_DataTable_Array) { + $emptyColumns = $this->dataTable->getMetadataIntersectArray(Piwik_DataTable::EMPTY_COLUMNS_METADATA_NAME); + } else { + $emptyColumns = $this->dataTable->getMetadata(Piwik_DataTable::EMPTY_COLUMNS_METADATA_NAME); + } if (is_array($emptyColumns)) { foreach ($emptyColumns as $emptyColumn) diff --git a/plugins/CoreHome/templates/datatable_manager.js b/plugins/CoreHome/templates/datatable_manager.js index 8581374307133c5beeed1d562ee882793116bc60..d5b48a7041b3a961ba7044a707d83a69b0f57f2d 100644 --- a/plugins/CoreHome/templates/datatable_manager.js +++ b/plugins/CoreHome/templates/datatable_manager.js @@ -116,8 +116,15 @@ var graphId = dataTableId + 'Chart'; graphElement.attr('id', graphId); - var graphData = JSON.parse(graphElement.attr('data-data')), - plot = new JQPlot(graphData, dataTableId); + var graphData; + try { + graphData = JSON.parse(graphElement.attr('data-data')); + } catch(e) { + console.error('JSON.parse Error: "' + e + "\" in:\n" + graphElement.attr('data-data')); + return; + } + + var plot = new JQPlot(graphData, dataTableId); // add external series toggle if it should be added var externalSeriesToggle = graphElement.attr('data-external-series-toggle');