Skip to content
Extraits de code Groupes Projets
Valider 161ec859 rédigé par diosmosis's avatar diosmosis
Parcourir les fichiers

Moving request metadata from VisitProperties to Tracker\Request class.

parent 2f91d3c8
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Affichage de
avec 105 ajouts et 104 suppressions
...@@ -206,10 +206,10 @@ class GoalManager ...@@ -206,10 +206,10 @@ class GoalManager
public function recordGoals(VisitProperties $visitProperties, Request $request) public function recordGoals(VisitProperties $visitProperties, Request $request)
{ {
$visitorInformation = $visitProperties->getProperties(); $visitorInformation = $visitProperties->getProperties();
$visitCustomVariables = $visitProperties->getRequestMetadata('CustomVariables', 'visitCustomVariables'); $visitCustomVariables = $request->getMetadata('CustomVariables', 'visitCustomVariables');
/** @var Action $action */ /** @var Action $action */
$action = $visitProperties->getRequestMetadata('Actions', 'action'); $action = $request->getMetadata('Actions', 'action');
$goal = $this->getGoalFromVisitor($visitProperties, $request, $action); $goal = $this->getGoalFromVisitor($visitProperties, $request, $action);
...@@ -232,7 +232,7 @@ class GoalManager ...@@ -232,7 +232,7 @@ class GoalManager
} }
// some goals are converted, so must be ecommerce Order or Cart Update // some goals are converted, so must be ecommerce Order or Cart Update
$isRequestEcommerce = $visitProperties->getRequestMetadata('Ecommerce', 'isRequestEcommerce'); $isRequestEcommerce = $request->getMetadata('Ecommerce', 'isRequestEcommerce');
if ($isRequestEcommerce) { if ($isRequestEcommerce) {
$this->recordEcommerceGoal($visitProperties, $request, $goal, $action); $this->recordEcommerceGoal($visitProperties, $request, $goal, $action);
} else { } else {
...@@ -268,14 +268,14 @@ class GoalManager ...@@ -268,14 +268,14 @@ class GoalManager
*/ */
protected function recordEcommerceGoal(VisitProperties $visitProperties, Request $request, $conversion, $action) protected function recordEcommerceGoal(VisitProperties $visitProperties, Request $request, $conversion, $action)
{ {
$isThereExistingCartInVisit = $visitProperties->getRequestMetadata('Goals', 'isThereExistingCartInVisit'); $isThereExistingCartInVisit = $request->getMetadata('Goals', 'isThereExistingCartInVisit');
if ($isThereExistingCartInVisit) { if ($isThereExistingCartInVisit) {
Common::printDebug("There is an existing cart for this visit"); Common::printDebug("There is an existing cart for this visit");
} }
$visitor = Visitor::makeFromVisitProperties($visitProperties); $visitor = Visitor::makeFromVisitProperties($visitProperties, $request);
$isGoalAnOrder = $visitProperties->getRequestMetadata('Ecommerce', 'isGoalAnOrder'); $isGoalAnOrder = $request->getMetadata('Ecommerce', 'isGoalAnOrder');
if ($isGoalAnOrder) { if ($isGoalAnOrder) {
$debugMessage = 'The conversion is an Ecommerce order'; $debugMessage = 'The conversion is an Ecommerce order';
...@@ -648,9 +648,9 @@ class GoalManager ...@@ -648,9 +648,9 @@ class GoalManager
*/ */
protected function recordStandardGoals(VisitProperties $visitProperties, Request $request, $goal, $action) protected function recordStandardGoals(VisitProperties $visitProperties, Request $request, $goal, $action)
{ {
$visitor = Visitor::makeFromVisitProperties($visitProperties); $visitor = Visitor::makeFromVisitProperties($visitProperties, $request);
$convertedGoals = $visitProperties->getRequestMetadata('Goals', 'goalsConverted') ?: array(); $convertedGoals = $request->getMetadata('Goals', 'goalsConverted') ?: array();
foreach ($convertedGoals as $convertedGoal) { foreach ($convertedGoals as $convertedGoal) {
$this->currentGoal = $convertedGoal; $this->currentGoal = $convertedGoal;
Common::printDebug("- Goal " . $convertedGoal['idgoal'] . " matched. Recording..."); Common::printDebug("- Goal " . $convertedGoal['idgoal'] . " matched. Recording...");
...@@ -799,7 +799,7 @@ class GoalManager ...@@ -799,7 +799,7 @@ class GoalManager
$visitDimensions = VisitDimension::getAllDimensions(); $visitDimensions = VisitDimension::getAllDimensions();
$visit = Visitor::makeFromVisitProperties($visitProperties); $visit = Visitor::makeFromVisitProperties($visitProperties, $request);
foreach ($visitDimensions as $dimension) { foreach ($visitDimensions as $dimension) {
$value = $dimension->onAnyGoalConversion($request, $visit, $action); $value = $dimension->onAnyGoalConversion($request, $visit, $action);
if (false !== $value) { if (false !== $value) {
......
...@@ -43,6 +43,15 @@ class Request ...@@ -43,6 +43,15 @@ class Request
protected $tokenAuth; protected $tokenAuth;
/**
* Stores plugin specific tracking request metadata. RequestProcessors can store
* whatever they want in this array, and other RequestProcessors can modify these
* values to change tracker behavior.
*
* @var string[][]
*/
private $requestMetadata = array();
const UNKNOWN_RESOLUTION = 'unknown'; const UNKNOWN_RESOLUTION = 'unknown';
const CUSTOM_TIMESTAMP_DOES_NOT_REQUIRE_TOKENAUTH_WHEN_NEWER_THAN = 14400; // 4 hours const CUSTOM_TIMESTAMP_DOES_NOT_REQUIRE_TOKENAUTH_WHEN_NEWER_THAN = 14400; // 4 hours
...@@ -762,4 +771,28 @@ class Request ...@@ -762,4 +771,28 @@ class Request
return $cip; return $cip;
} }
/**
* Set a request metadata value.
*
* @param string $pluginName eg, `'Actions'`, `'Goals'`, `'YourPlugin'`
* @param string $key
* @param mixed $value
*/
public function setMetadata($pluginName, $key, $value)
{
$this->requestMetadata[$pluginName][$key] = $value;
}
/**
* Get a request metadata value. Returns `null` if none exists.
*
* @param string $pluginName eg, `'Actions'`, `'Goals'`, `'YourPlugin'`
* @param string $key
* @return mixed
*/
public function getMetadata($pluginName, $key)
{
return isset($this->requestMetadata[$pluginName][$key]) ? $this->requestMetadata[$pluginName][$key] : null;
}
} }
...@@ -24,7 +24,7 @@ use Piwik\Tracker\Visit\VisitProperties; ...@@ -24,7 +24,7 @@ use Piwik\Tracker\Visit\VisitProperties;
* *
* Request metadata is shared between RequestProcessors, so RequestProcessors can tweak each others * Request metadata is shared between RequestProcessors, so RequestProcessors can tweak each others
* behavior, and thus, the behavior of the Tracker. Request metadata can be set and get using the * behavior, and thus, the behavior of the Tracker. Request metadata can be set and get using the
* {@link VisitProperties::setRequestMetadata()} and {@link VisitProperties::getRequestMetadata()} * {@link Request::setMetadata()} and {@link Request::getMetadata()}
* methods. * methods.
* *
* Each RequestProcessor lists the request metadata it computes and exposes in its class * Each RequestProcessor lists the request metadata it computes and exposes in its class
......
...@@ -119,10 +119,10 @@ class Visit implements VisitInterface ...@@ -119,10 +119,10 @@ class Visit implements VisitInterface
} }
} }
$isNewVisit = $this->visitProperties->getRequestMetadata('CoreHome', 'isNewVisit'); $isNewVisit = $this->request->getMetadata('CoreHome', 'isNewVisit');
if (!$isNewVisit) { if (!$isNewVisit) {
$isNewVisit = $this->triggerPredicateHookOnDimensions($this->getAllVisitDimensions(), 'shouldForceNewVisit'); $isNewVisit = $this->triggerPredicateHookOnDimensions($this->getAllVisitDimensions(), 'shouldForceNewVisit');
$this->visitProperties->setRequestMetadata('CoreHome', 'isNewVisit', $isNewVisit); $this->request->setMetadata('CoreHome', 'isNewVisit', $isNewVisit);
} }
foreach ($this->requestProcessors as $processor) { foreach ($this->requestProcessors as $processor) {
...@@ -135,7 +135,7 @@ class Visit implements VisitInterface ...@@ -135,7 +135,7 @@ class Visit implements VisitInterface
} }
} }
$isNewVisit = $this->visitProperties->getRequestMetadata('CoreHome', 'isNewVisit'); $isNewVisit = $this->request->getMetadata('CoreHome', 'isNewVisit');
// Known visit when: // Known visit when:
// ( - the visitor has the Piwik cookie with the idcookie ID used by Piwik to match the visitor // ( - the visitor has the Piwik cookie with the idcookie ID used by Piwik to match the visitor
...@@ -146,9 +146,9 @@ class Visit implements VisitInterface ...@@ -146,9 +146,9 @@ class Visit implements VisitInterface
// - the last page view for this visitor was less than 30 minutes ago @see isLastActionInTheSameVisit() // - the last page view for this visitor was less than 30 minutes ago @see isLastActionInTheSameVisit()
if (!$isNewVisit) { if (!$isNewVisit) {
try { try {
$this->handleExistingVisit($this->visitProperties->getRequestMetadata('Goals', 'visitIsConverted')); $this->handleExistingVisit($this->request->getMetadata('Goals', 'visitIsConverted'));
} catch (VisitorNotFoundInDb $e) { } catch (VisitorNotFoundInDb $e) {
$this->visitProperties->setRequestMetadata('CoreHome', 'visitorNotFoundInDb', true); // TODO: perhaps we should just abort here? $this->request->setMetadata('CoreHome', 'visitorNotFoundInDb', true); // TODO: perhaps we should just abort here?
} }
} }
...@@ -157,7 +157,7 @@ class Visit implements VisitInterface ...@@ -157,7 +157,7 @@ class Visit implements VisitInterface
// - the visitor doesn't have the Piwik cookie, and couldn't be matched in @see recognizeTheVisitor() // - the visitor doesn't have the Piwik cookie, and couldn't be matched in @see recognizeTheVisitor()
// - the visitor does have the Piwik cookie but the idcookie and idvisit found in the cookie didn't match to any existing visit in the DB // - the visitor does have the Piwik cookie but the idcookie and idvisit found in the cookie didn't match to any existing visit in the DB
if ($isNewVisit) { if ($isNewVisit) {
$this->handleNewVisit($this->visitProperties->getRequestMetadata('Goals', 'visitIsConverted')); $this->handleNewVisit($this->request->getMetadata('Goals', 'visitIsConverted'));
} }
// update the cookie with the new visit information // update the cookie with the new visit information
...@@ -298,7 +298,7 @@ class Visit implements VisitInterface ...@@ -298,7 +298,7 @@ class Visit implements VisitInterface
*/ */
protected function getVisitorIdcookie() protected function getVisitorIdcookie()
{ {
$isKnown = $this->visitProperties->getRequestMetadata('CoreHome', 'isVisitorKnown'); $isKnown = $this->request->getMetadata('CoreHome', 'isVisitorKnown');
if ($isKnown) { if ($isKnown) {
return $this->visitProperties->getProperty('idvisitor'); return $this->visitProperties->getProperty('idvisitor');
} }
...@@ -407,7 +407,7 @@ class Visit implements VisitInterface ...@@ -407,7 +407,7 @@ class Visit implements VisitInterface
{ {
$idVisitor = $this->getVisitorIdcookie(); $idVisitor = $this->getVisitorIdcookie();
$visitorIp = $this->getVisitorIp(); $visitorIp = $this->getVisitorIp();
$configId = $this->visitProperties->getRequestMetadata('CoreHome', 'visitorId'); $configId = $this->request->getMetadata('CoreHome', 'visitorId');
$this->visitProperties->clearProperties(); $this->visitProperties->clearProperties();
...@@ -453,7 +453,7 @@ class Visit implements VisitInterface ...@@ -453,7 +453,7 @@ class Visit implements VisitInterface
$visitor = $this->makeVisitorFacade(); $visitor = $this->makeVisitorFacade();
/** @var Action $action */ /** @var Action $action */
$action = $this->visitProperties->getRequestMetadata('Actions', 'action'); $action = $this->request->getMetadata('Actions', 'action');
foreach ($dimensions as $dimension) { foreach ($dimensions as $dimension) {
$value = $dimension->$hook($this->request, $visitor, $action); $value = $dimension->$hook($this->request, $visitor, $action);
...@@ -482,7 +482,7 @@ class Visit implements VisitInterface ...@@ -482,7 +482,7 @@ class Visit implements VisitInterface
$visitor = $this->makeVisitorFacade(); $visitor = $this->makeVisitorFacade();
/** @var Action $action */ /** @var Action $action */
$action = $this->visitProperties->getRequestMetadata('Actions', 'action'); $action = $this->request->getMetadata('Actions', 'action');
foreach ($dimensions as $dimension) { foreach ($dimensions as $dimension) {
if ($dimension->$hook($this->request, $visitor, $action)) { if ($dimension->$hook($this->request, $visitor, $action)) {
...@@ -577,6 +577,6 @@ class Visit implements VisitInterface ...@@ -577,6 +577,6 @@ class Visit implements VisitInterface
private function makeVisitorFacade() private function makeVisitorFacade()
{ {
return Visitor::makeFromVisitProperties($this->visitProperties); return Visitor::makeFromVisitProperties($this->visitProperties, $this->request);
} }
} }
...@@ -21,39 +21,6 @@ class VisitProperties ...@@ -21,39 +21,6 @@ class VisitProperties
*/ */
private $visitInfo = array(); private $visitInfo = array();
/**
* Stores plugin specific tracking request metadata. RequestProcessors can store
* whatever they want in this array, and other RequestProcessors can modify these
* values to change tracker behavior.
*
* @var string[][]
*/
private $requestMetadata = array();
/**
* Set a request metadata value.
*
* @param string $pluginName eg, `'Actions'`, `'Goals'`, `'YourPlugin'`
* @param string $key
* @param mixed $value
*/
public function setRequestMetadata($pluginName, $key, $value)
{
$this->requestMetadata[$pluginName][$key] = $value;
}
/**
* Get a request metadata value. Returns `null` if none exists.
*
* @param string $pluginName eg, `'Actions'`, `'Goals'`, `'YourPlugin'`
* @param string $key
* @return mixed
*/
public function getRequestMetadata($pluginName, $key)
{
return @$this->requestMetadata[$pluginName][$key];
}
/** /**
* Returns a visit property, or `null` if none is set. * Returns a visit property, or `null` if none is set.
* *
......
...@@ -24,9 +24,9 @@ class Visitor ...@@ -24,9 +24,9 @@ class Visitor
$this->setIsVisitorKnown($isVisitorKnown); $this->setIsVisitorKnown($isVisitorKnown);
} }
public static function makeFromVisitProperties(VisitProperties $visitProperties) public static function makeFromVisitProperties(VisitProperties $visitProperties, Request $request)
{ {
$isKnown = $visitProperties->getRequestMetadata('CoreHome', 'isVisitorKnown'); $isKnown = $request->getMetadata('CoreHome', 'isVisitorKnown');
return new Visitor($visitProperties, $isKnown); return new Visitor($visitProperties, $isKnown);
} }
......
...@@ -51,20 +51,20 @@ class ActionsRequestProcessor extends RequestProcessor ...@@ -51,20 +51,20 @@ class ActionsRequestProcessor extends RequestProcessor
$action = Action::factory($request); $action = Action::factory($request);
$action->writeDebugInfo(); $action->writeDebugInfo();
$visitProperties->setRequestMetadata('Actions', 'action', $action); $request->setMetadata('Actions', 'action', $action);
// save the exit actions of the last action in this visit as the referrer actions for the action being tracked. // save the exit actions of the last action in this visit as the referrer actions for the action being tracked.
// when the visit is updated, these columns will be changed, so we have to do this before recordLogs // when the visit is updated, these columns will be changed, so we have to do this before recordLogs
$visitProperties->setRequestMetadata('Actions', 'idReferrerActionUrl', $request->setMetadata('Actions', 'idReferrerActionUrl',
$visitProperties->getProperty('visit_exit_idaction_url')); $visitProperties->getProperty('visit_exit_idaction_url'));
$visitProperties->setRequestMetadata('Actions', 'idReferrerActionName', $request->setMetadata('Actions', 'idReferrerActionName',
$visitProperties->getProperty('visit_exit_idaction_name')); $visitProperties->getProperty('visit_exit_idaction_name'));
} }
public function afterRequestProcessed(VisitProperties $visitProperties, Request $request) public function afterRequestProcessed(VisitProperties $visitProperties, Request $request)
{ {
/** @var Action $action */ /** @var Action $action */
$action = $visitProperties->getRequestMetadata('Actions', 'action'); $action = $request->getMetadata('Actions', 'action');
if (!empty($action)) { // other plugins can unset the action if they want if (!empty($action)) { // other plugins can unset the action if they want
$action->loadIdsFromLogActionTable(); $action->loadIdsFromLogActionTable();
...@@ -74,20 +74,20 @@ class ActionsRequestProcessor extends RequestProcessor ...@@ -74,20 +74,20 @@ class ActionsRequestProcessor extends RequestProcessor
public function recordLogs(VisitProperties $visitProperties, Request $request) public function recordLogs(VisitProperties $visitProperties, Request $request)
{ {
/** @var Action $action */ /** @var Action $action */
$action = $visitProperties->getRequestMetadata('Actions', 'action'); $action = $request->getMetadata('Actions', 'action');
if ($action !== null if ($action !== null
&& !$visitProperties->getRequestMetadata('CoreHome', 'visitorNotFoundInDb') && !$request->getMetadata('CoreHome', 'visitorNotFoundInDb')
) { ) {
$idReferrerActionUrl = 0; $idReferrerActionUrl = 0;
$idReferrerActionName = 0; $idReferrerActionName = 0;
if (!$visitProperties->getRequestMetadata('CoreHome', 'isNewVisit')) { if (!$request->getMetadata('CoreHome', 'isNewVisit')) {
$idReferrerActionUrl = $visitProperties->getRequestMetadata('Actions', 'idReferrerActionUrl'); $idReferrerActionUrl = $request->getMetadata('Actions', 'idReferrerActionUrl');
$idReferrerActionName = $visitProperties->getRequestMetadata('Actions', 'idReferrerActionName'); $idReferrerActionName = $request->getMetadata('Actions', 'idReferrerActionName');
} }
$visitor = Visitor::makeFromVisitProperties($visitProperties); $visitor = Visitor::makeFromVisitProperties($visitProperties, $request);
$action->record($visitor, $idReferrerActionUrl, $idReferrerActionName); $action->record($visitor, $idReferrerActionUrl, $idReferrerActionName);
} }
} }
......
...@@ -56,7 +56,7 @@ class VisitGoalBuyer extends VisitDimension ...@@ -56,7 +56,7 @@ class VisitGoalBuyer extends VisitDimension
*/ */
public function onNewVisit(Request $request, Visitor $visitor, $action) public function onNewVisit(Request $request, Visitor $visitor, $action)
{ {
return $this->getBuyerType($visitor); return $this->getBuyerType($request);
} }
/** /**
...@@ -70,7 +70,7 @@ class VisitGoalBuyer extends VisitDimension ...@@ -70,7 +70,7 @@ class VisitGoalBuyer extends VisitDimension
$goalBuyer = $visitor->getVisitorColumn($this->columnName); $goalBuyer = $visitor->getVisitorColumn($this->columnName);
// Ecommerce buyer status // Ecommerce buyer status
$visitEcommerceStatus = $this->getBuyerType($visitor, $goalBuyer); $visitEcommerceStatus = $this->getBuyerType($request, $goalBuyer);
if ($visitEcommerceStatus != self::TYPE_BUYER_NONE if ($visitEcommerceStatus != self::TYPE_BUYER_NONE
// only update if the value has changed (prevents overwriting the value in case a request has // only update if the value has changed (prevents overwriting the value in case a request has
...@@ -106,14 +106,14 @@ class VisitGoalBuyer extends VisitDimension ...@@ -106,14 +106,14 @@ class VisitGoalBuyer extends VisitDimension
return self::$visitEcommerceStatus[$id]; return self::$visitEcommerceStatus[$id];
} }
private function getBuyerType(Visitor $visitor, $existingType = self::TYPE_BUYER_NONE) private function getBuyerType(Request $request, $existingType = self::TYPE_BUYER_NONE)
{ {
$isRequestEcommerce = $visitor->visitProperties->getRequestMetadata('Ecommerce', 'isRequestEcommerce'); $isRequestEcommerce = $request->getMetadata('Ecommerce', 'isRequestEcommerce');
if (!$isRequestEcommerce) { if (!$isRequestEcommerce) {
return $existingType; return $existingType;
} }
$isGoalAnOrder = $visitor->visitProperties->getRequestMetadata('Ecommerce', 'isGoalAnOrder'); $isGoalAnOrder = $request->getMetadata('Ecommerce', 'isGoalAnOrder');
if ($isGoalAnOrder) { if ($isGoalAnOrder) {
return self::TYPE_BUYER_ORDERED; return self::TYPE_BUYER_ORDERED;
} }
......
...@@ -93,13 +93,13 @@ class VisitRequestProcessor extends RequestProcessor ...@@ -93,13 +93,13 @@ class VisitRequestProcessor extends RequestProcessor
// visitor recognition // visitor recognition
$visitorId = $this->userSettings->getConfigId($request, $visitProperties->getProperty('location_ip')); $visitorId = $this->userSettings->getConfigId($request, $visitProperties->getProperty('location_ip'));
$visitProperties->setRequestMetadata('CoreHome', 'visitorId', $visitorId); $request->setMetadata('CoreHome', 'visitorId', $visitorId);
$isKnown = $this->visitorRecognizer->findKnownVisitor($visitorId, $visitProperties, $request); $isKnown = $this->visitorRecognizer->findKnownVisitor($visitorId, $visitProperties, $request);
$visitProperties->setRequestMetadata('CoreHome', 'isVisitorKnown', $isKnown); $request->setMetadata('CoreHome', 'isVisitorKnown', $isKnown);
$isNewVisit = $this->isVisitNew($visitProperties, $request); $isNewVisit = $this->isVisitNew($visitProperties, $request);
$visitProperties->setRequestMetadata('CoreHome', 'isNewVisit', $isNewVisit); $request->setMetadata('CoreHome', 'isNewVisit', $isNewVisit);
return false; return false;
} }
...@@ -133,7 +133,7 @@ class VisitRequestProcessor extends RequestProcessor ...@@ -133,7 +133,7 @@ class VisitRequestProcessor extends RequestProcessor
*/ */
public function isVisitNew(VisitProperties $visitProperties, Request $request) public function isVisitNew(VisitProperties $visitProperties, Request $request)
{ {
$isKnown = $visitProperties->getRequestMetadata('CoreHome', 'isVisitorKnown'); $isKnown = $request->getMetadata('CoreHome', 'isVisitorKnown');
if (!$isKnown) { if (!$isKnown) {
return true; return true;
} }
......
...@@ -96,11 +96,12 @@ class VisitRequestProcessorTest extends IntegrationTestCase ...@@ -96,11 +96,12 @@ class VisitRequestProcessorTest extends IntegrationTestCase
{ {
$idsite = API::getInstance()->addSite("name", "http://piwik.net/"); $idsite = API::getInstance()->addSite("name", "http://piwik.net/");
/** @var Request $request */
list($visit, $request) = $this->prepareVisitWithRequest(array('idsite' => $idsite), $currentActionTime); list($visit, $request) = $this->prepareVisitWithRequest(array('idsite' => $idsite), $currentActionTime);
$visitProperties = new VisitProperties(); $visitProperties = new VisitProperties();
$visitProperties->setProperty('visit_last_action_time', Date::factory($lastActionTimestamp)->getTimestamp()); $visitProperties->setProperty('visit_last_action_time', Date::factory($lastActionTimestamp)->getTimestamp());
$visitProperties->setRequestMetadata('CoreHome', 'isVisitorKnown', $isVisitorKnown); $request->setMetadata('CoreHome', 'isVisitorKnown', $isVisitorKnown);
return array($visit, $visitProperties, $request); return array($visit, $visitProperties, $request);
} }
......
...@@ -42,12 +42,12 @@ class CustomVariablesRequestProcessor extends RequestProcessor ...@@ -42,12 +42,12 @@ class CustomVariablesRequestProcessor extends RequestProcessor
Common::printDebug($visitorCustomVariables); Common::printDebug($visitorCustomVariables);
} }
$visitProperties->setRequestMetadata('CustomVariables', 'visitCustomVariables', $visitorCustomVariables); $request->setMetadata('CustomVariables', 'visitCustomVariables', $visitorCustomVariables);
} }
public function onNewVisit(VisitProperties $visitProperties, Request $request) public function onNewVisit(VisitProperties $visitProperties, Request $request)
{ {
$visitCustomVariables = $visitProperties->getRequestMetadata('CustomVariables', 'visitCustomVariables'); $visitCustomVariables = $request->getMetadata('CustomVariables', 'visitCustomVariables');
if (!empty($visitCustomVariables)) { if (!empty($visitCustomVariables)) {
$visitProperties->setProperties(array_merge($visitProperties->getProperties(), $visitCustomVariables)); $visitProperties->setProperties(array_merge($visitProperties->getProperties(), $visitCustomVariables));
...@@ -56,7 +56,7 @@ class CustomVariablesRequestProcessor extends RequestProcessor ...@@ -56,7 +56,7 @@ class CustomVariablesRequestProcessor extends RequestProcessor
public function onExistingVisit(&$valuesToUpdate, VisitProperties $visitProperties, Request $request) public function onExistingVisit(&$valuesToUpdate, VisitProperties $visitProperties, Request $request)
{ {
$visitCustomVariables = $visitProperties->getRequestMetadata('CustomVariables', 'visitCustomVariables'); $visitCustomVariables = $request->getMetadata('CustomVariables', 'visitCustomVariables');
if (!empty($visitCustomVariables)) { if (!empty($visitCustomVariables)) {
$valuesToUpdate = array_merge($valuesToUpdate, $visitCustomVariables); $valuesToUpdate = array_merge($valuesToUpdate, $visitCustomVariables);
......
...@@ -44,32 +44,32 @@ class EcommerceRequestProcessor extends RequestProcessor ...@@ -44,32 +44,32 @@ class EcommerceRequestProcessor extends RequestProcessor
public function processRequestParams(VisitProperties $visitProperties, Request $request) public function processRequestParams(VisitProperties $visitProperties, Request $request)
{ {
$isGoalAnOrder = $this->isRequestForAnOrder($request); $isGoalAnOrder = $this->isRequestForAnOrder($request);
$visitProperties->setRequestMetadata('Ecommerce', 'isGoalAnOrder', $isGoalAnOrder); $request->setMetadata('Ecommerce', 'isGoalAnOrder', $isGoalAnOrder);
$isRequestEcommerce = $this->isRequestEcommerce($request); $isRequestEcommerce = $this->isRequestEcommerce($request);
$visitProperties->setRequestMetadata('Ecommerce', 'isRequestEcommerce', $isRequestEcommerce); $request->setMetadata('Ecommerce', 'isRequestEcommerce', $isRequestEcommerce);
if ($isRequestEcommerce) { if ($isRequestEcommerce) {
// Mark the visit as Converted only if it is an order (not for a Cart update) // Mark the visit as Converted only if it is an order (not for a Cart update)
$idGoal = GoalManager::IDGOAL_CART; $idGoal = GoalManager::IDGOAL_CART;
if ($isGoalAnOrder) { if ($isGoalAnOrder) {
$idGoal = GoalManager::IDGOAL_ORDER; $idGoal = GoalManager::IDGOAL_ORDER;
$visitProperties->setRequestMetadata('Goals', 'visitIsConverted', true); $request->setMetadata('Goals', 'visitIsConverted', true);
} }
$visitProperties->setRequestMetadata('Goals', 'goalsConverted', array(array('idgoal' => $idGoal))); $request->setMetadata('Goals', 'goalsConverted', array(array('idgoal' => $idGoal)));
$visitProperties->setRequestMetadata('Actions', 'action', null); // don't track actions when tracking ecommerce orders $request->setMetadata('Actions', 'action', null); // don't track actions when tracking ecommerce orders
} }
} }
public function afterRequestProcessed(VisitProperties $visitProperties, Request $request) public function afterRequestProcessed(VisitProperties $visitProperties, Request $request)
{ {
$goalsConverted = $visitProperties->getRequestMetadata('Goals', 'goalsConverted'); $goalsConverted = $request->getMetadata('Goals', 'goalsConverted');
if (!empty($goalsConverted)) { if (!empty($goalsConverted)) {
$isThereExistingCartInVisit = $this->goalManager->detectIsThereExistingCartInVisit( $isThereExistingCartInVisit = $this->goalManager->detectIsThereExistingCartInVisit(
$visitProperties->getProperties()); $visitProperties->getProperties());
$visitProperties->setRequestMetadata('Goals', 'isThereExistingCartInVisit', $isThereExistingCartInVisit); $request->setMetadata('Goals', 'isThereExistingCartInVisit', $isThereExistingCartInVisit);
} }
} }
......
...@@ -59,12 +59,12 @@ class GoalsRequestProcessor extends RequestProcessor ...@@ -59,12 +59,12 @@ class GoalsRequestProcessor extends RequestProcessor
$goal = $this->goalManager->detectGoalId($request->getIdSite(), $request); $goal = $this->goalManager->detectGoalId($request->getIdSite(), $request);
$visitIsConverted = !empty($goal); $visitIsConverted = !empty($goal);
$visitProperties->setRequestMetadata('Goals', 'visitIsConverted', $visitIsConverted); $request->setMetadata('Goals', 'visitIsConverted', $visitIsConverted);
$existingConvertedGoals = $visitProperties->getRequestMetadata('Goals', 'goalsConverted') ?: array(); $existingConvertedGoals = $request->getMetadata('Goals', 'goalsConverted') ?: array();
$visitProperties->setRequestMetadata('Goals', 'goalsConverted', array_merge($existingConvertedGoals, array($goal))); $request->setMetadata('Goals', 'goalsConverted', array_merge($existingConvertedGoals, array($goal)));
$visitProperties->setRequestMetadata('Actions', 'action', null); // don't track actions when doing manual goal conversions $request->setMetadata('Actions', 'action', null); // don't track actions when doing manual goal conversions
// if we find a idgoal in the URL, but then the goal is not valid, this is most likely a fake request // if we find a idgoal in the URL, but then the goal is not valid, this is most likely a fake request
if (!$visitIsConverted) { if (!$visitIsConverted) {
...@@ -79,10 +79,10 @@ class GoalsRequestProcessor extends RequestProcessor ...@@ -79,10 +79,10 @@ class GoalsRequestProcessor extends RequestProcessor
public function afterRequestProcessed(VisitProperties $visitProperties, Request $request) public function afterRequestProcessed(VisitProperties $visitProperties, Request $request)
{ {
$goalsConverted = $visitProperties->getRequestMetadata('Goals', 'goalsConverted'); $goalsConverted = $request->getMetadata('Goals', 'goalsConverted');
/** @var Action $action */ /** @var Action $action */
$action = $visitProperties->getRequestMetadata('Actions', 'action'); $action = $request->getMetadata('Actions', 'action');
// if the visit hasn't already been converted another way (ie, manual goal conversion or ecommerce conversion, // if the visit hasn't already been converted another way (ie, manual goal conversion or ecommerce conversion,
// try to convert based on the action) // try to convert based on the action)
...@@ -91,11 +91,11 @@ class GoalsRequestProcessor extends RequestProcessor ...@@ -91,11 +91,11 @@ class GoalsRequestProcessor extends RequestProcessor
) { ) {
$goalsConverted = $this->goalManager->detectGoalsMatchingUrl($request->getIdSite(), $action); $goalsConverted = $this->goalManager->detectGoalsMatchingUrl($request->getIdSite(), $action);
$existingGoalsConverted = $visitProperties->getRequestMetadata('Goals', 'goalsConverted') ?: array(); $existingGoalsConverted = $request->getMetadata('Goals', 'goalsConverted') ?: array();
$visitProperties->setRequestMetadata('Goals', 'goalsConverted', array_merge($existingGoalsConverted, $goalsConverted)); $request->setMetadata('Goals', 'goalsConverted', array_merge($existingGoalsConverted, $goalsConverted));
if (!empty($goalsConverted)) { if (!empty($goalsConverted)) {
$visitProperties->setRequestMetadata('Goals', 'visitIsConverted', true); $request->setMetadata('Goals', 'visitIsConverted', true);
} }
} }
...@@ -106,15 +106,15 @@ class GoalsRequestProcessor extends RequestProcessor ...@@ -106,15 +106,15 @@ class GoalsRequestProcessor extends RequestProcessor
// - the exception is caught here and will result in a new visit incorrectly // - the exception is caught here and will result in a new visit incorrectly
// In this case, we cancel the current conversion to be recorded: // In this case, we cancel the current conversion to be recorded:
$isManualGoalConversion = $this->isManualGoalConversion($request); $isManualGoalConversion = $this->isManualGoalConversion($request);
$requestIsEcommerce = $visitProperties->getRequestMetadata('Goals', 'isRequestEcommerce'); $requestIsEcommerce = $request->getMetadata('Goals', 'isRequestEcommerce');
$visitorNotFoundInDb = $visitProperties->getRequestMetadata('CoreHome', 'visitorNotFoundInDb'); $visitorNotFoundInDb = $request->getMetadata('CoreHome', 'visitorNotFoundInDb');
if ($visitorNotFoundInDb if ($visitorNotFoundInDb
&& ($isManualGoalConversion && ($isManualGoalConversion
|| $requestIsEcommerce) || $requestIsEcommerce)
) { ) {
$visitProperties->setRequestMetadata('Goals', 'goalsConverted', array()); $request->setMetadata('Goals', 'goalsConverted', array());
$visitProperties->setRequestMetadata('Goals', 'visitIsConverted', false); $request->setMetadata('Goals', 'visitIsConverted', false);
} }
} }
...@@ -122,7 +122,7 @@ class GoalsRequestProcessor extends RequestProcessor ...@@ -122,7 +122,7 @@ class GoalsRequestProcessor extends RequestProcessor
public function recordLogs(VisitProperties $visitProperties, Request $request) public function recordLogs(VisitProperties $visitProperties, Request $request)
{ {
// record the goals if there were conversions in this request (even if the visit itself was not converted) // record the goals if there were conversions in this request (even if the visit itself was not converted)
$goalsConverted = $visitProperties->getRequestMetadata('Goals', 'goalsConverted'); $goalsConverted = $request->getMetadata('Goals', 'goalsConverted');
if (!empty($goalsConverted)) { if (!empty($goalsConverted)) {
$this->goalManager->recordGoals($visitProperties, $request); $this->goalManager->recordGoals($visitProperties, $request);
} }
......
...@@ -24,13 +24,13 @@ class PingRequestProcessor extends RequestProcessor ...@@ -24,13 +24,13 @@ class PingRequestProcessor extends RequestProcessor
if ($this->isPingRequest($request)) { if ($this->isPingRequest($request)) {
// on a ping request that is received before the standard visit length, we just update the visit time w/o adding a new action // on a ping request that is received before the standard visit length, we just update the visit time w/o adding a new action
Common::printDebug("-> ping=1 request: we do not track a new action nor a new visit nor any goal."); Common::printDebug("-> ping=1 request: we do not track a new action nor a new visit nor any goal.");
$visitProperties->setRequestMetadata('Actions', 'action', null); $request->setMetadata('Actions', 'action', null);
$visitProperties->setRequestMetadata('Goals', 'goalsConverted', array()); $request->setMetadata('Goals', 'goalsConverted', array());
$visitProperties->setRequestMetadata('Goals', 'visitIsConverted', false); $request->setMetadata('Goals', 'visitIsConverted', false);
// When a ping request is received more than 30 min after the last request/ping, // When a ping request is received more than 30 min after the last request/ping,
// we choose not to create a new visit. // we choose not to create a new visit.
if ($visitProperties->getRequestMetadata('CoreHome', 'isNewVisit')) { if ($request->getMetadata('CoreHome', 'isNewVisit')) {
Common::printDebug("-> ping=1 request: we do _not_ create a new visit."); Common::printDebug("-> ping=1 request: we do _not_ create a new visit.");
return true; // abort request return true; // abort request
} }
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter