From f27cf4c9337617f6cf62978440b028d648043f01 Mon Sep 17 00:00:00 2001
From: mattab <matthieu.aubry@gmail.com>
Date: Fri, 1 Nov 2013 13:45:45 +1300
Subject: [PATCH] Removing a //FIXME : refactoring reserved custom variable
 slots for ecommerce view

---
 core/Tracker/Action.php              | 26 +++++---------------------
 core/Tracker/ActionPageview.php      |  8 ++++++++
 core/Tracker/Visit.php               |  2 +-
 libs/PiwikTracker/PiwikTracker.php   | 18 +++++++++++++-----
 plugins/CustomVariables/Archiver.php |  7 ++++---
 5 files changed, 31 insertions(+), 30 deletions(-)

diff --git a/core/Tracker/Action.php b/core/Tracker/Action.php
index 4f80c4443e..08739ebadf 100644
--- a/core/Tracker/Action.php
+++ b/core/Tracker/Action.php
@@ -17,15 +17,13 @@ use Piwik\Piwik;
 use Piwik\Tracker;
 
 /**
- *
+ * An action
  *
  * @package Piwik
  * @subpackage Tracker
  */
 abstract class Action
 {
-
-    //FIXMEA lookup uses and check Events compat
     const TYPE_PAGE_URL = 1;
     const TYPE_OUTLINK = 2;
     const TYPE_DOWNLOAD = 3;
@@ -35,13 +33,11 @@ abstract class Action
     const TYPE_ECOMMERCE_ITEM_CATEGORY = 7;
     const TYPE_SITE_SEARCH = 8;
 
-    //FIXMEA lookup uses and check Events compat
-    const TYPE_EVENT = 11; // Same as TYPE_EVENT_ACTION
+    const TYPE_EVENT = 10; // Alias TYPE_EVENT_CATEGORY
     const TYPE_EVENT_CATEGORY = 10;
     const TYPE_EVENT_ACTION = 11;
     const TYPE_EVENT_NAME = 12;
 
-
     const DB_COLUMN_CUSTOM_FLOAT = 'custom_float';
 
     /**
@@ -83,9 +79,7 @@ abstract class Action
     protected $request;
 
     private $idLinkVisitAction;
-
-    protected $actionIdsCached = array();
-
+    private $actionIdsCached = array();
     private $actionName;
     private $actionType;
     private $actionUrl;
@@ -149,18 +143,7 @@ abstract class Action
         $this->actionUrl = $url;
     }
 
-    protected function getActionsToLookup()
-    {
-        return array(
-            'idaction_name' => $this->getNameAndType(),
-            'idaction_url' => $this->getUrlAndType()
-        );
-    }
-
-    protected function getNameAndType()
-    {
-        return array($this->getActionName(), Action::TYPE_PAGE_TITLE);
-    }
+    abstract protected function getActionsToLookup();
 
     protected function getUrlAndType()
     {
@@ -351,3 +334,4 @@ abstract class Action
     }
 
 }
+
diff --git a/core/Tracker/ActionPageview.php b/core/Tracker/ActionPageview.php
index a341000fc2..17e7b54f24 100644
--- a/core/Tracker/ActionPageview.php
+++ b/core/Tracker/ActionPageview.php
@@ -37,6 +37,14 @@ class ActionPageview extends Action
         $this->timeGeneration = $this->request->getPageGenerationTime();
     }
 
+    protected function getActionsToLookup()
+    {
+        return array(
+            'idaction_name' => array($this->getActionName(), Action::TYPE_PAGE_TITLE),
+            'idaction_url' => $this->getUrlAndType()
+        );
+    }
+
     function getCustomFloatValue()
     {
         return $this->request->getPageGenerationTime();
diff --git a/core/Tracker/Visit.php b/core/Tracker/Visit.php
index abd9d1f2ae..7bcfe6c3f8 100644
--- a/core/Tracker/Visit.php
+++ b/core/Tracker/Visit.php
@@ -902,7 +902,7 @@ class Visit implements VisitInterface
      * @param $visitIsConverted
      * @return array
      */
-    protected function getExistingVisitFieldsToUpdate($action, $visitIsConverted)
+    protected function getExistingVisitFieldsToUpdate(Action $action, $visitIsConverted)
     {
         $valuesToUpdate = array();
 
diff --git a/libs/PiwikTracker/PiwikTracker.php b/libs/PiwikTracker/PiwikTracker.php
index 71c9459329..0300983f53 100644
--- a/libs/PiwikTracker/PiwikTracker.php
+++ b/libs/PiwikTracker/PiwikTracker.php
@@ -65,6 +65,14 @@ class PiwikTracker
      */
     const FIRST_PARTY_COOKIES_PREFIX = '_pk_';
 
+    /**
+     * Ecommerce item page view tracking stores item's metadata in these Custom Variables slots.
+     */
+    const CVAR_INDEX_ECOMMERCE_ITEM_PRICE = 2;
+    const CVAR_INDEX_ECOMMERCE_ITEM_SKU = 3;
+    const CVAR_INDEX_ECOMMERCE_ITEM_NAME = 4;
+    const CVAR_INDEX_ECOMMERCE_ITEM_CATEGORY = 5;
+
     /**
      * Builds a PiwikTracker object, used to track visits, pages and Goal conversions
      * for a specific website, by using the Piwik Tracking API.
@@ -610,10 +618,10 @@ class PiwikTracker
         } else {
             $category = "";
         }
-        $this->pageCustomVar[5] = array('_pkc', $category);
+        $this->pageCustomVar[self::CVAR_INDEX_ECOMMERCE_ITEM_CATEGORY] = array('_pkc', $category);
 
         if (!empty($price)) {
-            $this->pageCustomVar[2] = array('_pkp', (float)$price);
+            $this->pageCustomVar[self::CVAR_INDEX_ECOMMERCE_ITEM_PRICE] = array('_pkp', (float)$price);
         }
 
         // On a category page, do not record "Product name not defined"
@@ -621,12 +629,12 @@ class PiwikTracker
             return;
         }
         if (!empty($sku)) {
-            $this->pageCustomVar[3] = array('_pks', $sku);
+            $this->pageCustomVar[self::CVAR_INDEX_ECOMMERCE_ITEM_SKU] = array('_pks', $sku);
         }
         if (empty($name)) {
             $name = "";
         }
-        $this->pageCustomVar[4] = array('_pkn', $name);
+        $this->pageCustomVar[self::CVAR_INDEX_ECOMMERCE_ITEM_NAME] = array('_pkn', $name);
     }
 
     /**
@@ -906,7 +914,7 @@ class PiwikTracker
         }
         return true;
     }
-    
+
     /**
      * Deletes all first party cookies from the client
      */
diff --git a/plugins/CustomVariables/Archiver.php b/plugins/CustomVariables/Archiver.php
index 80ef438830..81a8755885 100644
--- a/plugins/CustomVariables/Archiver.php
+++ b/plugins/CustomVariables/Archiver.php
@@ -71,8 +71,8 @@ class Archiver extends \Piwik\Plugin\Archiver
         // IF we query Custom Variables scope "page" either: Product SKU, Product Name,
         // then we also query the "Product page view" price which was possibly recorded.
         $additionalSelects = false;
-        // FIXMEA
-        if (in_array($slot, array(3, 4, 5))) {
+
+        if (in_array($slot, array(\PiwikTracker::CVAR_INDEX_ECOMMERCE_ITEM_SKU, \PiwikTracker::CVAR_INDEX_ECOMMERCE_ITEM_NAME, \PiwikTracker::CVAR_INDEX_ECOMMERCE_ITEM_CATEGORY))) {
             $additionalSelects = array($this->getSelectAveragePrice());
         }
         $query = $this->getLogAggregator()->queryActionsByDimension($dimensions, $where, $additionalSelects);
@@ -84,7 +84,8 @@ class Archiver extends \Piwik\Plugin\Archiver
 
     protected function getSelectAveragePrice()
     {
-        return LogAggregator::getSqlRevenue("AVG(log_link_visit_action.custom_var_v2)")
+        $field = "custom_var_v" . \PiwikTracker::CVAR_INDEX_ECOMMERCE_ITEM_PRICE;
+        return LogAggregator::getSqlRevenue("AVG(log_link_visit_action.{$field})")
         . " as `" . Metrics::INDEX_ECOMMERCE_ITEM_PRICE_VIEWED . "`";
     }
 
-- 
GitLab