forked from rebillar/site-accueil-insa
142 lines
4.4 KiB
PHP
142 lines
4.4 KiB
PHP
<?php
|
|
/**
|
|
* Matomo - free/libre analytics platform
|
|
*
|
|
* @link https://matomo.org
|
|
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
|
*
|
|
*/
|
|
namespace Piwik\Plugins\CoreHome\Columns;
|
|
|
|
use Piwik\Metrics\Formatter;
|
|
use Piwik\Piwik;
|
|
use Piwik\Plugin\Dimension\VisitDimension;
|
|
use Piwik\Tracker\Action;
|
|
use Piwik\Tracker\GoalManager;
|
|
use Piwik\Tracker\Request;
|
|
use Piwik\Tracker\Visitor;
|
|
|
|
class VisitGoalBuyer extends VisitDimension
|
|
{
|
|
// log_visit.visit_goal_buyer
|
|
const TYPE_BUYER_NONE = 0;
|
|
const TYPE_BUYER_ORDERED = 1;
|
|
const TYPE_BUYER_OPEN_CART = GoalManager::TYPE_BUYER_OPEN_CART;
|
|
const TYPE_BUYER_ORDERED_AND_OPEN_CART = GoalManager::TYPE_BUYER_ORDERED_AND_OPEN_CART;
|
|
|
|
protected static $visitEcommerceStatus = array(
|
|
self::TYPE_BUYER_NONE => '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;
|
|
}
|
|
|
|
}
|