'none', self::TYPE_BUYER_ORDERED => 'ordered', self::TYPE_BUYER_OPEN_CART => 'abandonedCart', self::TYPE_BUYER_ORDERED_AND_OPEN_CART => 'orderedThenAbandonedCart', ); protected $columnName = 'visit_goal_buyer'; protected $columnType = 'TINYINT(1) NULL'; protected $segmentName = 'visitEcommerceStatus'; protected $nameSingular = 'General_EcommerceVisitStatusDesc'; protected $type = self::TYPE_ENUM; public function __construct() { $example = Piwik::translate('General_EcommerceVisitStatusEg', '"&segment=visitEcommerceStatus==ordered,visitEcommerceStatus==orderedThenAbandonedCart"'); $this->acceptValues = implode(", ", self::$visitEcommerceStatus) . '. ' . $example; } public function formatValue($value, $idSite, Formatter $formatter) { switch ($value) { case 'none'; case '0': case self::TYPE_BUYER_NONE: return Piwik::translate('UserCountryMap_None'); case 'ordered': case '1': case self::TYPE_BUYER_ORDERED: return Piwik::translate('CoreHome_VisitStatusOrdered'); case 'abandonedCart': case self::TYPE_BUYER_OPEN_CART: return Piwik::translate('Goals_AbandonedCart'); case 'orderedThenAbandonedCart': case self::TYPE_BUYER_ORDERED_AND_OPEN_CART: return Piwik::translate('CoreHome_VisitStatusOrderedThenAbandoned'); } return $value; } public function getEnumColumnValues() { return self::$visitEcommerceStatus; } /** * @param Request $request * @param Visitor $visitor * @param Action|null $action * @return mixed */ public function onNewVisit(Request $request, Visitor $visitor, $action) { return $this->getBuyerType($request); } /** * @param Request $request * @param Visitor $visitor * @param Action|null $action * @return int */ public function onExistingVisit(Request $request, Visitor $visitor, $action) { $goalBuyer = $visitor->getVisitorColumn($this->columnName); // Ecommerce buyer status $visitEcommerceStatus = $this->getBuyerType($request, $goalBuyer); if ($visitEcommerceStatus != self::TYPE_BUYER_NONE // only update if the value has changed (prevents overwriting the value in case a request has // updated it in the meantime) && $visitEcommerceStatus != $goalBuyer) { return $visitEcommerceStatus; } return false; } /** * @ignore */ public static function getVisitEcommerceStatusFromId($id) { if (!isset(self::$visitEcommerceStatus[$id])) { throw new \Exception("Unexpected ECommerce status value "); } return self::$visitEcommerceStatus[$id]; } 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; } }