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
path: root/core
diff options
context:
space:
mode:
authorBenaka Moorthi <benaka.moorthi@gmail.com>2013-07-13 05:17:34 +0400
committerBenaka Moorthi <benaka.moorthi@gmail.com>2013-07-13 05:17:34 +0400
commit349f28088cac598b3c9a8e5686fefbd9aaef8cc4 (patch)
tree9a88381370c19d0e8b3d2bb9e4bc74677a9aac40 /core
parenta5a1d4f1e067b2806f04cbab4c4eb7e988db719b (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.php17
-rw-r--r--core/ViewDataTable.php61
-rw-r--r--core/ViewDataTable/HtmlTable.php2
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;