From 556e32e09dcf7671ce7ffbb4ae8fbf82b8314bab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Czo=C5=82nowski?= <marcin@czolnowski.net> Date: Thu, 28 Nov 2013 16:40:19 +0100 Subject: [PATCH] Fix for ecommerce segmentation. --- core/DataAccess/LogAggregator.php | 27 +++------------------------ core/Segment.php | 2 ++ plugins/Goals/Archiver.php | 3 ++- 3 files changed, 7 insertions(+), 25 deletions(-) diff --git a/core/DataAccess/LogAggregator.php b/core/DataAccess/LogAggregator.php index 18731f3925..82c886236e 100644 --- a/core/DataAccess/LogAggregator.php +++ b/core/DataAccess/LogAggregator.php @@ -499,25 +499,6 @@ class LogAggregator */ public function queryEcommerceItems($dimension) { - $query = "SELECT - name as label, - " . self::getSqlRevenue('SUM(quantity * price)') . " as `" . Metrics::INDEX_ECOMMERCE_ITEM_REVENUE . "`, - " . self::getSqlRevenue('SUM(quantity)') . " as `" . Metrics::INDEX_ECOMMERCE_ITEM_QUANTITY . "`, - " . self::getSqlRevenue('SUM(price)') . " as `" . Metrics::INDEX_ECOMMERCE_ITEM_PRICE . "`, - count(distinct idorder) as `" . Metrics::INDEX_ECOMMERCE_ORDERS . "`, - count(distinct idvisit) as `" . Metrics::INDEX_NB_VISITS . "`, - case idorder when '0' then " . GoalManager::IDGOAL_CART . " else " . GoalManager::IDGOAL_ORDER . " end as ecommerceType - FROM " . Common::prefixTable('log_conversion_item') . " - LEFT JOIN " . Common::prefixTable('log_action') . " - ON $dimension = idaction - WHERE server_time >= ? - AND server_time <= ? - AND idsite = ? - AND deleted = 0 - GROUP BY ecommerceType, $dimension - ORDER BY null"; - // Segment not supported yet - // $query = $this->query($select, $from, $where, $groupBy, $orderBy); $select = array( "name as label", self::getSqlRevenue('SUM(quantity * price)') . " as `" . Metrics::INDEX_ECOMMERCE_ITEM_REVENUE . "`", @@ -528,21 +509,19 @@ class LogAggregator "case idorder when '0' then " . GoalManager::IDGOAL_CART . " else " . GoalManager::IDGOAL_ORDER . " end as ecommerceType" ); - $bind = $this->getBindDatetimeSite(); - return $this->getDb()->query($query, $bind); $from = array( "log_conversion_item", array( "table" => "log_action", - "joinOn" => sprintf("log_conversion_item.%s = log_action.idaction", $field) + "joinOn" => sprintf("log_conversion_item.%s = log_action.idaction", $dimension) ), array( "table" => "log_visit", "joinOn" => "log_conversion_item.idvisit = log_visit.idvisit" ) ); - $where = " server_time >= ? AND server_time <= ? AND log_conversion_item.idsite = ? AND deleted = 0"; - $groupBy = sprintf("ecommerceType, %s", $field); + $where = "server_time >= ? AND server_time <= ? AND log_conversion_item.idsite = ? AND deleted = 0"; + $groupBy = sprintf("ecommerceType, %s", $dimension); $query = $this->generateQuery( implode(", ", $select), diff --git a/core/Segment.php b/core/Segment.php index 5c0011f86f..5adfc7238b 100644 --- a/core/Segment.php +++ b/core/Segment.php @@ -356,6 +356,8 @@ class Segment if ($table == "log_conversion") { $joinWithSubSelect = true; } + } elseif ($table === 'log_conversion_item') { + $join = "log_conversion_item.idvisit = log_visit.idvisit"; } else { throw new Exception("Table '$table', can't be joined for segmentation"); } diff --git a/plugins/Goals/Archiver.php b/plugins/Goals/Archiver.php index 81d45d093b..d112eb9251 100644 --- a/plugins/Goals/Archiver.php +++ b/plugins/Goals/Archiver.php @@ -375,7 +375,8 @@ class Archiver extends \Piwik\Plugin\Archiver $dataTableToSum = $this->dimensionRecord; foreach ($this->dimensionRecord as $recordName) { $dataTableToSum[] = self::getItemRecordNameAbandonedCart($recordName); - $this->getProcessor()->aggregateDataTableReports($dataTableToSum); + } + $this->getProcessor()->aggregateDataTableRecords($dataTableToSum); /* * Archive General Goal metrics -- GitLab