Skip to content

Commit

Permalink
refs #3786 fix websites having 0 visits are not returned, fix MultiSi…
Browse files Browse the repository at this point in the history
…tes.getAll does not work with dates like last7
  • Loading branch information
tsteur committed Oct 29, 2013
1 parent 7e5becd commit f1b47f6
Showing 1 changed file with 50 additions and 10 deletions.
60 changes: 50 additions & 10 deletions plugins/MultiSites/API.php
Expand Up @@ -222,6 +222,14 @@ private function buildDataTable($sites, $period, $date, $segment, $_restrictSite
}
}

if ($dataTable instanceof DataTable\Map) {
foreach ($dataTable->getDataTables() as $table) {
$this->addMissingWebsites($table, $fieldsToGet);
}
} else {
$this->addMissingWebsites($dataTable, $fieldsToGet);
}

// calculate total visits/actions/revenue
$this->setMetricsTotalsMetadata($dataTable, $apiMetrics);

Expand Down Expand Up @@ -253,17 +261,12 @@ private function buildDataTable($sites, $period, $date, $segment, $_restrictSite
// remove eCommerce related metrics on non eCommerce Piwik sites
// note: this is not optimal in terms of performance: those metrics should not be retrieved in the first place
if ($enhanced) {
// $dataTableRows instanceOf Row[]
$dataTableRows = $dataTable->getRows();

foreach ($dataTableRows as $dataTableRow) {
$siteId = $dataTableRow->getColumn('label');
if (!Site::isEcommerceEnabledFor($siteId)) {
foreach ($apiECommerceMetrics as $metricSettings) {
$dataTableRow->deleteColumn($metricSettings[self::METRIC_RECORD_NAME_KEY]);
$dataTableRow->deleteColumn($metricSettings[self::METRIC_EVOLUTION_COL_NAME_KEY]);
}
if ($dataTable instanceof DataTable\Map) {
foreach ($dataTable->getDataTables() as $table) {
$this->removeEcommerceRelatedMetricsOnNonEcommercePiwikSites($table, $apiECommerceMetrics);
}
} else {
$this->removeEcommerceRelatedMetricsOnNonEcommercePiwikSites($dataTable, $apiECommerceMetrics);
}
}

Expand Down Expand Up @@ -473,5 +476,42 @@ private static function getLastPeriodMetadataName($name)
{
return 'last_period_' . $name;
}

/**
* @param $dataTable
* @param $fieldsToGet
*/
private function addMissingWebsites($dataTable, $fieldsToGet)
{
$siteIdsInDataTable = array();
foreach ($dataTable->getRows() as $row) {
/** @var DataTable\Row $row */
$siteIdsInDataTable[] = $row->getColumn('label');
}

foreach (Site::$infoSites as $site) {
if (!in_array($site['idsite'], $siteIdsInDataTable)) {
$siteRow = array_combine($fieldsToGet, array_pad(array(), count($fieldsToGet), 0));
$siteRow['label'] = (int)$site['idsite'];
$dataTable->addRowFromSimpleArray($siteRow);
}
}
}

private function removeEcommerceRelatedMetricsOnNonEcommercePiwikSites($dataTable, $apiECommerceMetrics)
{
// $dataTableRows instanceOf Row[]
$dataTableRows = $dataTable->getRows();

foreach ($dataTableRows as $dataTableRow) {
$siteId = $dataTableRow->getColumn('label');
if (!Site::isEcommerceEnabledFor($siteId)) {
foreach ($apiECommerceMetrics as $metricSettings) {
$dataTableRow->deleteColumn($metricSettings[self::METRIC_RECORD_NAME_KEY]);
$dataTableRow->deleteColumn($metricSettings[self::METRIC_EVOLUTION_COL_NAME_KEY]);
}
}
}
}
}

0 comments on commit f1b47f6

Please sign in to comment.