1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
|
<?php
/**
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Plugins\Ecommerce\Tracker;
use Piwik\Tracker\GoalManager;
use Piwik\Tracker\Request;
use Piwik\Tracker\RequestProcessor;
use Piwik\Tracker\Visit\VisitProperties;
/**
* Handles ecommerce tracking requests.
*
* ## Request Metadata
*
* This processor defines the following request metadata under the **Ecommerce**
* plugin:
*
* * **isRequestEcommerce**: If `true`, the request is for an ecommerce goal conversion.
*
* Set in `processRequestParams()`.
*
* * **isGoalAnOrder**: If `true` the request is tracking an ecommerce order.
*
* Set in `processRequestParams()`.
*/
class EcommerceRequestProcessor extends RequestProcessor
{
/**
* @var GoalManager
*/
public $goalManager = null;
public function __construct(GoalManager $goalManager)
{
$this->goalManager = $goalManager;
}
public function processRequestParams(VisitProperties $visitProperties, Request $request)
{
$isGoalAnOrder = $this->isRequestForAnOrder($request);
$request->setMetadata('Ecommerce', 'isGoalAnOrder', $isGoalAnOrder);
$isRequestEcommerce = $this->isRequestEcommerce($request);
$request->setMetadata('Ecommerce', 'isRequestEcommerce', $isRequestEcommerce);
if ($isRequestEcommerce) {
// Mark the visit as Converted only if it is an order (not for a Cart update)
$idGoal = GoalManager::IDGOAL_CART;
if ($isGoalAnOrder) {
$idGoal = GoalManager::IDGOAL_ORDER;
$request->setMetadata('Goals', 'visitIsConverted', true);
}
$request->setMetadata('Goals', 'goalsConverted', array(array('idgoal' => $idGoal)));
$request->setMetadata('Actions', 'action', null); // don't track actions when tracking ecommerce orders
}
return false;
}
public function afterRequestProcessed(VisitProperties $visitProperties, Request $request)
{
$goalsConverted = $request->getMetadata('Goals', 'goalsConverted');
if (!empty($goalsConverted)) {
$isThereExistingCartInVisit = $this->goalManager->detectIsThereExistingCartInVisit(
$visitProperties->getProperties()
);
$request->setMetadata('Goals', 'isThereExistingCartInVisit', $isThereExistingCartInVisit);
}
return false;
}
private function isRequestForAnOrder(Request $request)
{
$orderId = $request->getParam('ec_id');
return !empty($orderId);
}
private function isRequestEcommerce(Request $request)
{
$idGoal = $request->getParam('idgoal');
return 0 == $idGoal;
}
}
|