diff options
author | Benaka Moorthi <benaka.moorthi@gmail.com> | 2013-07-13 05:17:34 +0400 |
---|---|---|
committer | Benaka Moorthi <benaka.moorthi@gmail.com> | 2013-07-13 05:17:34 +0400 |
commit | 349f28088cac598b3c9a8e5686fefbd9aaef8cc4 (patch) | |
tree | 9a88381370c19d0e8b3d2bb9e4bc74677a9aac40 /core | |
parent | a5a1d4f1e067b2806f04cbab4c4eb7e988db719b (diff) |
Refs #4041, fix bug in displaying DBStats reports by redefining how columns_to_display view property defaults and allow unique visitors to be displayed on reports that have it, outside of period=day.
Diffstat (limited to 'core')
-rw-r--r-- | core/DataTable.php | 17 | ||||
-rw-r--r-- | core/ViewDataTable.php | 61 | ||||
-rw-r--r-- | core/ViewDataTable/HtmlTable.php | 2 |
3 files changed, 71 insertions, 9 deletions
diff --git a/core/DataTable.php b/core/DataTable.php index e9f3cd2c20..370dc8b35d 100644 --- a/core/DataTable.php +++ b/core/DataTable.php @@ -694,6 +694,23 @@ class Piwik_DataTable } return $columnValues; } + + /** + * Returns the list of columns the rows in this datatable contain. This will return the + * columns of the first row with data and assume they occur in every other row as well. + * + * @return array + */ + public function getColumns() + { + foreach ($this->getRows() as $row) { + $columns = $row->getColumns(); + if (!empty($columns)) { + return array_keys($columns); + } + } + return array(); + } /** * Returns an array containing the rows Metadata values diff --git a/core/ViewDataTable.php b/core/ViewDataTable.php index 7700de9dcf..32f6a4c2d2 100644 --- a/core/ViewDataTable.php +++ b/core/ViewDataTable.php @@ -173,17 +173,12 @@ abstract class Piwik_ViewDataTable Piwik_Metrics::getDefaultMetrics(), Piwik_Metrics::getDefaultProcessedMetrics() ); + $this->viewProperties['columns_to_display'] = array(); - $this->viewProperties['columns_to_display'][] = 'label'; - $columns = Piwik_Common::getRequestVar('columns', false); if ($columns !== false) { - $this->viewProperties['columns_to_display'] = array_merge( - $this->viewProperties['columns_to_display'], Piwik::getArrayFromApiParameter($columns)); - } else if (Piwik_Common::getRequestVar('period', false) == 'day') { - $this->viewProperties['columns_to_display'][] = 'nb_uniq_visitors'; - } else { - $this->viewProperties['columns_to_display'][] = 'nb_visits'; + $this->viewProperties['columns_to_display'] = Piwik::getArrayFromApiParameter($columns); + array_unshift($this->viewProperties['columns_to_display'], 'label'); } } @@ -616,6 +611,27 @@ abstract class Piwik_ViewDataTable $this->dataTable->filter($filterName, $filterParameters); } } + + // default columns_to_display to label, nb_uniq_visitors/nb_visits if those columns exist in the + // dataset + if ($this->dataTable instanceof Piwik_DataTable) { + $columns = $this->dataTable->getColumns(); + if (empty($this->viewProperties['columns_to_display']) + && $this->dataTableColumnsContains($columns, array('nb_visits', 'nb_uniq_visitors')) + ) { + $columnsToDisplay = array('label'); + + // if unique visitors data is available, show it, otherwise just visits + if ($this->dataTableColumnsContains($columns, 'nb_uniq_visitors')) { + $columnsToDisplay[] = 'nb_uniq_visitors'; + } else { + $columnsToDisplay[] = 'nb_visits'; + } + + $this->viewProperties['columns_to_display'] = $columnsToDisplay; + } + } + return true; } @@ -1610,4 +1626,33 @@ abstract class Piwik_ViewDataTable && Piwik_Common::getRequestVar('filter_pattern_recursive', false) !== false && Piwik_Common::getRequestVar('flat', false) === false; } + + /** + * Returns true if the first array contains one or more of the specified + * column names or their associated integer INDEX_ value. + * + * @param array $columns Piwik_DataTable_Row columns. + * @param array|string $columnsToCheckFor eg, array('nb_visits', 'nb_uniq_visitors') + * @return bool + */ + private function dataTableColumnsContains($columns, $columnsToCheckFor) + { + if (!is_array($columnsToCheckFor)) { + $columnsToCheckFor = array($columnsToCheckFor); + } + + foreach ($columnsToCheckFor as $columnToCheckFor) { + foreach ($columns as $column) { + // check for the column name and its associated integer INDEX_ value + if ($column == $columnToCheckFor + || (isset(Piwik_Metrics::$mappingFromNameToId[$columnToCheckFor]) + && $column == Piwik_Metrics::$mappingFromNameToId[$columnToCheckFor]) + ) { + return true; + } + } + } + + return false; + } } diff --git a/core/ViewDataTable/HtmlTable.php b/core/ViewDataTable/HtmlTable.php index 2d6505db85..f0a9131b09 100644 --- a/core/ViewDataTable/HtmlTable.php +++ b/core/ViewDataTable/HtmlTable.php @@ -132,7 +132,7 @@ class Piwik_ViewDataTable_HtmlTable extends Piwik_ViewDataTable $nbColumns = count($columns); // case no data in the array we use the number of columns set to be displayed if ($nbColumns == 0) { - $nbColumns = count($this->columnsToDisplay); + $nbColumns = count($this->viewProperties['columns_to_display']); } $view->dataTable = $this->dataTable; |