Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Two New segments #18953

Merged
merged 21 commits into from
Mar 26, 2022
Merged
2 changes: 1 addition & 1 deletion plugins/API/API.php
Original file line number Diff line number Diff line change
Expand Up @@ -745,7 +745,7 @@ protected function doesSegmentNeedActionsData($segmentName)
$segmentsNeedActionsInfo = array('visitConvertedGoalId',
'pageUrl', 'pageTitle', 'siteSearchKeyword', 'siteSearchCategory', 'siteSearchCount',
'entryPageTitle', 'entryPageUrl', 'exitPageTitle', 'exitPageUrl',
'outlinkUrl', 'downloadUrl', 'eventUrl', 'orderId', 'productViewName', 'productViewSku', 'productViewPrice',
'outlinkUrl', 'downloadUrl', 'eventUrl', 'orderId', 'revenueOrder', 'revenueAbandonedCart', 'productViewName', 'productViewSku', 'productViewPrice',
'productViewCategory1', 'productViewCategory2', 'productViewCategory3', 'productViewCategory4', 'productViewCategory5'
);
$isCustomVariablePage = stripos($segmentName, 'customVariablePage') !== false;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8" ?>
<result/>
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8" ?>
<result/>
72 changes: 71 additions & 1 deletion plugins/Ecommerce/Columns/Revenue.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,15 @@
*/
namespace Piwik\Plugins\Ecommerce\Columns;

use Piwik\Columns\DimensionSegmentFactory;
use Piwik\Columns\Discriminator;
use Piwik\Tracker\GoalManager;
use Piwik\Common;
use Piwik\Piwik;
use Piwik\Plugin\Segment;
use Piwik\Segment\SegmentExpression;
use Piwik\Segment\SegmentsList;
use Piwik\Tracker\Action;
use Piwik\Tracker\GoalManager;
use Piwik\Tracker\Request;
use Piwik\Tracker\Visitor;

Expand All @@ -27,6 +33,70 @@ public function getDbDiscriminator()
return new Discriminator($this->dbTableName, 'idgoal', GoalManager::IDGOAL_ORDER);
}


public function configureSegments(SegmentsList $segmentsList, DimensionSegmentFactory $dimensionSegmentFactory)
{
//new Segment revenue on order
$segment = new Segment();
$segment->setCategory($this->category);
$segment->setName(Piwik::translate('Ecommerce_OrderRevenue'));
$segment->setSegment('revenueOrder');
$segment->setSqlSegment('log_conversion.idvisit');
$segment->setSqlFilter(function ($valueToMatch, $sqlField, $matchType) {
return $this->getRevenueQuery($valueToMatch, $sqlField , $matchType, 0);
});
$segmentsList->addSegment($dimensionSegmentFactory->createSegment($segment));

//new Segment revenue left in cart
$segment = new Segment();
$segment->setCategory($this->category);
$segment->setName(Piwik::translate('Ecommerce_RevenueLeftInCart'));
$segment->setSegment('revenueAbandonedCart');
$segment->setSqlSegment('log_conversion.idvisit');
$segment->setSqlFilter(function ($valueToMatch, $sqlField , $matchType) {
return $this->getRevenueQuery($valueToMatch, $sqlField , $matchType,-1);
});
$segmentsList->addSegment($dimensionSegmentFactory->createSegment($segment));

}

/**
* revenue sql filter
* @param $valueToMatch
* @param $sqlField
* @param $matchType
* @param false $cart
* @return array
*/
private function getRevenueQuery($valueToMatch, $sqlField , $matchType, $idGoal)
{
//supported operator type
$supportType = [
SegmentExpression::MATCH_EQUAL,
SegmentExpression::MATCH_GREATER_OR_EQUAL,
SegmentExpression::MATCH_LESS_OR_EQUAL,
SegmentExpression::MATCH_GREATER,
SegmentExpression::MATCH_LESS,
];

if (!in_array($valueToMatch, $supportType)) {
peterhashair marked this conversation as resolved.
Show resolved Hide resolved
throw new \Exception("This match type $matchType is not available for action-segments.");
}

//to fit mysql operator
if ($matchType === SegmentExpression::MATCH_EQUAL) {
$matchType = "=";
}
peterhashair marked this conversation as resolved.
Show resolved Hide resolved

$table = Common::prefixTable($this->dbTableName);
$sql = " SELECT idvisit from {$table} WHERE (idgoal = {$idGoal} and revenue {$matchType} ?) ";
return [
'SQL' => $sql,
'bind' =>(float)$valueToMatch,
];
}


/**
* @param Request $request
* @param Visitor $visitor
Expand Down
2 changes: 1 addition & 1 deletion plugins/Ecommerce/Columns/RevenueDiscount.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
*/
namespace Piwik\Plugins\Ecommerce\Columns;

use Piwik\Tracker\GoalManager;
use Piwik\Tracker\Action;
use Piwik\Tracker\GoalManager;
use Piwik\Tracker\Request;
use Piwik\Tracker\Visitor;

Expand Down
2 changes: 2 additions & 0 deletions plugins/Ecommerce/lang/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
"Sales": "Sales",
"Order": "Order",
"OrderId": "Order ID",
"OrderRevenue": "Order Revenue",
"RevenueLeftInCart": "Revenue Left In Cart",
"Orders": "Orders",
"ViewedProductCategory": "Viewed Product Category",
"ViewedProductName": "Viewed Product Name",
Expand Down
25 changes: 24 additions & 1 deletion plugins/Ecommerce/tests/System/EcommerceOrderWithItemsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@

use Piwik\Date;
use Piwik\Piwik;
use Piwik\Tests\Framework\TestCase\SystemTestCase;
use Piwik\Tests\Fixtures\TwoSitesEcommerceOrderWithItems;
use Piwik\Tests\Framework\TestCase\SystemTestCase;

/**
* Tests API methods after ecommerce orders are tracked.
Expand Down Expand Up @@ -304,6 +304,29 @@ public function getApiForTesting()
'testSuffix' => '_productPrice',
'segment' => 'productPrice>500',
]],
[
['Goals.get'],
[
'idSite' => $idSite,
'date' => $dateTime,
'periods' => 'day',
'testSuffix' => '_SegmentRevenueOrder',
'segment' => 'revenueOrder>500',
]
],
[
['Goals.get'],
[
'idSite' => $idSite,
'date' => $dateTime,
'periods' => 'day',
'testSuffix' => '_SegmentCartRevenueOrder',
'segment' => 'revenueAbandonedCart>100',
]
],



),
self::getApiForTestingScheduledReports($dateTime, 'week')
);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0"?>
<result>
<nb_conversions>2</nb_conversions>
<nb_visits_converted>1</nb_visits_converted>
<revenue>3111.11</revenue>
<conversion_rate>50%</conversion_rate>
<nb_conversions_new_visit>0</nb_conversions_new_visit>
<nb_visits_converted_new_visit>0</nb_visits_converted_new_visit>
<revenue_new_visit>0</revenue_new_visit>
<conversion_rate_new_visit>0%</conversion_rate_new_visit>
<nb_conversions_returning_visit>2</nb_conversions_returning_visit>
<nb_visits_converted_returning_visit>1</nb_visits_converted_returning_visit>
<revenue_returning_visit>3111.11</revenue_returning_visit>
<conversion_rate_returning_visit>50%</conversion_rate_returning_visit>
</result>
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0"?>
<result>
<nb_conversions>2</nb_conversions>
<nb_visits_converted>1</nb_visits_converted>
<revenue>3111.11</revenue>
<conversion_rate>100%</conversion_rate>
<nb_conversions_new_visit>0</nb_conversions_new_visit>
<nb_visits_converted_new_visit>0</nb_visits_converted_new_visit>
<revenue_new_visit>0</revenue_new_visit>
<conversion_rate_new_visit>0%</conversion_rate_new_visit>
<nb_conversions_returning_visit>2</nb_conversions_returning_visit>
<nb_visits_converted_returning_visit>1</nb_visits_converted_returning_visit>
<revenue_returning_visit>3111.11</revenue_returning_visit>
<conversion_rate_returning_visit>100%</conversion_rate_returning_visit>
</result>
Original file line number Diff line number Diff line change
Expand Up @@ -759,12 +759,24 @@
<name>Order ID</name>
<segment>orderId</segment>
</row>
<row>
<type>metric</type>
<category>Ecommerce</category>
<name>Order Revenue</name>
<segment>revenueOrder</segment>
</row>
<row>
<type>metric</type>
<category>Ecommerce</category>
<name>Product Price</name>
<segment>productPrice</segment>
</row>
<row>
<type>metric</type>
<category>Ecommerce</category>
<name>Revenue Left In Cart</name>
<segment>revenueAbandonedCart</segment>
</row>
<row>
<type>metric</type>
<category>Ecommerce</category>
Expand Down