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 } } 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); } } 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; } }