public function recordLogs(VisitProperties $visitProperties, Request $request) { /** @var Action $action */ $action = $request->getMetadata('Actions', 'action'); if ($action !== null && !$request->getMetadata('CoreHome', 'visitorNotFoundInDb')) { $idReferrerActionUrl = 0; $idReferrerActionName = 0; if (!$request->getMetadata('CoreHome', 'isNewVisit')) { $idReferrerActionUrl = $request->getMetadata('Actions', 'idReferrerActionUrl'); $idReferrerActionName = $request->getMetadata('Actions', 'idReferrerActionName'); } $visitor = Visitor::makeFromVisitProperties($visitProperties, $request); $action->record($visitor, $idReferrerActionUrl, $idReferrerActionName); } }
public function onExistingVisit(&$valuesToUpdate, VisitProperties $visitProperties, Request $request) { $visitCustomVariables = $request->getMetadata('CustomVariables', 'visitCustomVariables'); if (!empty($visitCustomVariables)) { $valuesToUpdate = array_merge($valuesToUpdate, $visitCustomVariables); } }
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); } }
public function afterRequestProcessed(VisitProperties $visitProperties, Request $request) { $action = $request->getMetadata('Actions', 'action'); if (empty($action) || !$action instanceof Action) { return; } $dimensionsToSet = $this->getCustomDimensionsInScope(CustomDimensions::SCOPE_ACTION, $request); foreach ($dimensionsToSet as $field => $value) { $action->setCustomField($field, $value); } }
private function triggerPredicateHookOnDimensions($dimensions, $hook) { $visitor = $this->makeVisitorFacade(); /** @var Action $action */ $action = $this->request->getMetadata('Actions', 'action'); foreach ($dimensions as $dimension) { if ($dimension->{$hook}($this->request, $visitor, $action)) { return true; } } return false; }
public function afterRequestProcessed(VisitProperties $visitProperties, Request $request) { $action = $request->getMetadata('Actions', 'action'); if (empty($action) || !$action instanceof Action) { return; } $customVariables = $action->getCustomVariables(); if (!empty($customVariables)) { Common::printDebug("Page level Custom Variables: "); Common::printDebug($customVariables); foreach ($customVariables as $field => $value) { $action->setCustomField($field, $value); } } }
private function getBuyerType(Request $request, $existingType = self::TYPE_BUYER_NONE) { $isRequestEcommerce = $request->getMetadata('Ecommerce', 'isRequestEcommerce'); if (!$isRequestEcommerce) { return $existingType; } $isGoalAnOrder = $request->getMetadata('Ecommerce', 'isGoalAnOrder'); if ($isGoalAnOrder) { return self::TYPE_BUYER_ORDERED; } // request is Add to Cart if ($existingType == self::TYPE_BUYER_ORDERED || $existingType == self::TYPE_BUYER_ORDERED_AND_OPEN_CART) { return self::TYPE_BUYER_ORDERED_AND_OPEN_CART; } return self::TYPE_BUYER_OPEN_CART; }
private function getValueForDimension(Request $request) { /** @var Action $action */ $action = $request->getMetadata('Actions', 'action'); if (in_array($this->dimension, array('url', 'urlparam'))) { if (!empty($action)) { $dimension = $action->getActionUrlRaw(); } else { $dimension = $request->getParam('url'); } } elseif ($this->dimension === 'action_name' && !empty($action)) { $dimension = $action->getActionName(); } else { $dimension = $request->getParam($this->dimension); } if (!empty($dimension)) { $dimension = Common::unsanitizeInputValue($dimension); } return $dimension; }
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) $goalsConverted = $request->getMetadata('Goals', 'goalsConverted'); if (!empty($goalsConverted)) { $this->goalManager->recordGoals($visitProperties, $request); } }
/** * Records an Ecommerce conversion in the DB. Deals with Items found in the request. * Will deal with 2 types of conversions: Ecommerce Order and Ecommerce Cart update (Add to cart, Update Cart etc). * * @param array $conversion * @param Visitor $visitor * @param Action $action * @param array $visitInformation */ protected function recordEcommerceGoal(VisitProperties $visitProperties, Request $request, $conversion, $action) { $isThereExistingCartInVisit = $request->getMetadata('Goals', 'isThereExistingCartInVisit'); if ($isThereExistingCartInVisit) { Common::printDebug("There is an existing cart for this visit"); } $visitor = Visitor::makeFromVisitProperties($visitProperties, $request); $isGoalAnOrder = $request->getMetadata('Ecommerce', 'isGoalAnOrder'); if ($isGoalAnOrder) { $debugMessage = 'The conversion is an Ecommerce order'; $orderId = $request->getParam('ec_id'); $conversion['idorder'] = $orderId; $conversion['idgoal'] = self::IDGOAL_ORDER; $conversion['buster'] = Common::hashStringToInt($orderId); $conversionDimensions = ConversionDimension::getAllDimensions(); $conversion = $this->triggerHookOnDimensions($request, $conversionDimensions, 'onEcommerceOrderConversion', $visitor, $action, $conversion); } else { $debugMessage = 'The conversion is an Ecommerce Cart Update'; $conversion['buster'] = 0; $conversion['idgoal'] = self::IDGOAL_CART; $conversionDimensions = ConversionDimension::getAllDimensions(); $conversion = $this->triggerHookOnDimensions($request, $conversionDimensions, 'onEcommerceCartUpdateConversion', $visitor, $action, $conversion); } Common::printDebug($debugMessage . ':' . var_export($conversion, true)); // INSERT or Sync items in the Cart / Order for this visit & order $items = $this->getEcommerceItemsFromRequest($request); if (false === $items) { return; } $itemsCount = 0; foreach ($items as $item) { $itemsCount += $item[GoalManager::INTERNAL_ITEM_QUANTITY]; } $conversion['items'] = $itemsCount; if ($isThereExistingCartInVisit) { $recorded = $this->getModel()->updateConversion($visitProperties->getProperty('idvisit'), self::IDGOAL_CART, $conversion); } else { $recorded = $this->insertNewConversion($conversion, $visitProperties->getProperties(), $request); } if ($recorded) { $this->recordEcommerceItems($conversion, $items); } /** * Triggered after successfully persisting an ecommerce conversion. * * _Note: Subscribers should be wary of doing any expensive computation here as it may slow * the tracker down._ * * This event is deprecated, use [Dimensions](http://developer.piwik.org/guides/dimensions) instead. * * @param array $conversion The conversion entity that was just persisted. See what information * it contains [here](/guides/persistence-and-the-mysql-backend#conversions). * @param array $visitInformation The visit entity that we are tracking a conversion for. See what * information it contains [here](/guides/persistence-and-the-mysql-backend#visits). * @deprecated */ Piwik::postEvent('Tracker.recordEcommerceGoal', array($conversion, $visitProperties->getProperties())); }
public static function makeFromVisitProperties(VisitProperties $visitProperties, Request $request) { $isKnown = $request->getMetadata('CoreHome', 'isVisitorKnown'); return new Visitor($visitProperties, $isKnown); }
/** * Records an Ecommerce conversion in the DB. Deals with Items found in the request. * Will deal with 2 types of conversions: Ecommerce Order and Ecommerce Cart update (Add to cart, Update Cart etc). * * @param array $conversion * @param Visitor $visitor * @param Action $action * @param array $visitInformation */ protected function recordEcommerceGoal(VisitProperties $visitProperties, Request $request, $conversion, $action) { $isThereExistingCartInVisit = $request->getMetadata('Goals', 'isThereExistingCartInVisit'); if ($isThereExistingCartInVisit) { Common::printDebug("There is an existing cart for this visit"); } $visitor = Visitor::makeFromVisitProperties($visitProperties, $request); $isGoalAnOrder = $request->getMetadata('Ecommerce', 'isGoalAnOrder'); if ($isGoalAnOrder) { $debugMessage = 'The conversion is an Ecommerce order'; $orderId = $request->getParam('ec_id'); $conversion['idorder'] = $orderId; $conversion['idgoal'] = self::IDGOAL_ORDER; $conversion['buster'] = Common::hashStringToInt($orderId); $conversionDimensions = ConversionDimension::getAllDimensions(); $conversion = $this->triggerHookOnDimensions($request, $conversionDimensions, 'onEcommerceOrderConversion', $visitor, $action, $conversion); } else { $debugMessage = 'The conversion is an Ecommerce Cart Update'; $conversion['buster'] = 0; $conversion['idgoal'] = self::IDGOAL_CART; $conversionDimensions = ConversionDimension::getAllDimensions(); $conversion = $this->triggerHookOnDimensions($request, $conversionDimensions, 'onEcommerceCartUpdateConversion', $visitor, $action, $conversion); } Common::printDebug($debugMessage . ':' . var_export($conversion, true)); // INSERT or Sync items in the Cart / Order for this visit & order $items = $this->getEcommerceItemsFromRequest($request); if (false === $items) { return; } $itemsCount = 0; foreach ($items as $item) { $itemsCount += $item[GoalManager::INTERNAL_ITEM_QUANTITY]; } $conversion['items'] = $itemsCount; if ($isThereExistingCartInVisit) { $recorded = $this->getModel()->updateConversion($visitProperties->getProperty('idvisit'), self::IDGOAL_CART, $conversion); } else { $recorded = $this->insertNewConversion($conversion, $visitProperties->getProperties(), $request); } if ($recorded) { $this->recordEcommerceItems($conversion, $items); } }
/** * Determines if the tracker if the current action should be treated as the start of a new visit or * an action in an existing visit. * * Note: public only for tests. * * @param VisitProperties $visitProperties The current visit/visitor information. * @param Request $request * @return bool */ public function isVisitNew(VisitProperties $visitProperties, Request $request) { $isKnown = $request->getMetadata('CoreHome', 'isVisitorKnown'); if (!$isKnown) { return true; } $isLastActionInTheSameVisit = $this->isLastActionInTheSameVisit($visitProperties, $request); if (!$isLastActionInTheSameVisit) { Common::printDebug("Visitor detected, but last action was more than 30 minutes ago..."); return true; } $wasLastActionYesterday = $this->wasLastActionNotToday($visitProperties, $request); if ($wasLastActionYesterday) { Common::printDebug("Visitor detected, but last action was yesterday..."); return true; } return false; }
/** * Determines if the tracker if the current action should be treated as the start of a new visit or * an action in an existing visit. * * Note: public only for tests. * * @param VisitProperties $visitProperties The current visit/visitor information. * @param Request $request * @return bool */ public function isVisitNew(VisitProperties $visitProperties, Request $request) { $isKnown = $request->getMetadata('CoreHome', 'isVisitorKnown'); if (!$isKnown) { return true; } $isLastActionInTheSameVisit = $this->isLastActionInTheSameVisit($visitProperties, $request); if (!$isLastActionInTheSameVisit) { Common::printDebug("Visitor detected, but last action was more than 30 minutes ago..."); return true; } $wasLastActionYesterday = $this->wasLastActionNotToday($visitProperties, $request); $forceNewVisitAtMidnight = (bool) Config::getInstance()->Tracker['create_new_visit_after_midnight']; if ($wasLastActionYesterday && $forceNewVisitAtMidnight) { Common::printDebug("Visitor detected, but last action was yesterday..."); return true; } return false; }
/** * @param Request $request * @return int */ public static function getCurrentInteractionPosition($request) { $position = $request->getMetadata('Actions', 'visit_total_interactions'); return $position + 1; }