Skip to content
Extraits de code Groupes Projets
Valider b686ab1a rédigé par diosmosis's avatar diosmosis
Parcourir les fichiers

Refs #8630, when detecing campaign info in Referrers check _rcn and _rck query parameters.

parent f7678c9f
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -66,7 +66,7 @@ abstract class Base extends VisitDimension ...@@ -66,7 +66,7 @@ abstract class Base extends VisitDimension
* @param int $idSite * @param int $idSite
* @return array * @return array
*/ */
protected function getReferrerInformation($referrerUrl, $currentUrl, $idSite) protected function getReferrerInformation($referrerUrl, $currentUrl, $idSite, Request $request)
{ {
$cacheKey = $referrerUrl . $currentUrl . $idSite; $cacheKey = $referrerUrl . $currentUrl . $idSite;
...@@ -98,7 +98,7 @@ abstract class Base extends VisitDimension ...@@ -98,7 +98,7 @@ abstract class Base extends VisitDimension
$this->referrerHost = $this->referrerUrlParse['host']; $this->referrerHost = $this->referrerUrlParse['host'];
} }
$referrerDetected = $this->detectReferrerCampaign(); $referrerDetected = $this->detectReferrerCampaign($request);
if (!$referrerDetected) { if (!$referrerDetected) {
if ($this->detectReferrerDirectEntry() if ($this->detectReferrerDirectEntry()
...@@ -130,7 +130,7 @@ abstract class Base extends VisitDimension ...@@ -130,7 +130,7 @@ abstract class Base extends VisitDimension
$referrerUrl = $request->getParam('urlref'); $referrerUrl = $request->getParam('urlref');
$currentUrl = $request->getParam('url'); $currentUrl = $request->getParam('url');
return $this->getReferrerInformation($referrerUrl, $currentUrl, $request->getIdSite()); return $this->getReferrerInformation($referrerUrl, $currentUrl, $request->getIdSite(), $request);
} }
/** /**
...@@ -222,6 +222,25 @@ abstract class Base extends VisitDimension ...@@ -222,6 +222,25 @@ abstract class Base extends VisitDimension
} }
} }
protected function detectReferrerCampaignFromTrackerParams(Request $request)
{
$campaignName = $this->getReferrerCampaignQueryParam($request, '_rcn');
if (empty($campaignName)) {
return false;
}
$this->typeReferrerAnalyzed = Common::REFERRER_TYPE_CAMPAIGN;
$this->nameReferrerAnalyzed = $campaignName;
$keyword = $this->getReferrerCampaignQueryParam($request, '_rck');
if (!empty($keyword)) {
$this->keywordReferrerAnalyzed = $keyword;
}
return true;
}
/** /**
* We have previously tried to detect the campaign variables in the URL * We have previously tried to detect the campaign variables in the URL
* so at this stage, if the referrer host is the current host, * so at this stage, if the referrer host is the current host,
...@@ -301,9 +320,13 @@ abstract class Base extends VisitDimension ...@@ -301,9 +320,13 @@ abstract class Base extends VisitDimension
/** /**
* @return bool * @return bool
*/ */
protected function detectReferrerCampaign() protected function detectReferrerCampaign(Request $request)
{ {
$this->detectReferrerCampaignFromLandingUrl(); $isCampaign = $this->detectReferrerCampaignFromTrackerParams($request);
if (!$isCampaign) {
$this->detectReferrerCampaignFromLandingUrl();
}
$this->detectCampaignKeywordFromReferrerUrl(); $this->detectCampaignKeywordFromReferrerUrl();
if ($this->typeReferrerAnalyzed != Common::REFERRER_TYPE_CAMPAIGN) { if ($this->typeReferrerAnalyzed != Common::REFERRER_TYPE_CAMPAIGN) {
...@@ -329,8 +352,8 @@ abstract class Base extends VisitDimension ...@@ -329,8 +352,8 @@ abstract class Base extends VisitDimension
{ {
$referrerTimestamp = $request->getParam('_refts'); $referrerTimestamp = $request->getParam('_refts');
$referrerUrl = $request->getParam('_ref'); $referrerUrl = $request->getParam('_ref');
$referrerCampaignName = trim(urldecode($request->getParam('_rcn'))); $referrerCampaignName = $this->getReferrerCampaignQueryParam($request, '_rcn');
$referrerCampaignKeyword = trim(urldecode($request->getParam('_rck'))); $referrerCampaignKeyword = $this->getReferrerCampaignQueryParam($request, '_rck');
// Attributing the correct Referrer to this conversion. // Attributing the correct Referrer to this conversion.
// Priority order is as follows: // Priority order is as follows:
...@@ -365,7 +388,7 @@ abstract class Base extends VisitDimension ...@@ -365,7 +388,7 @@ abstract class Base extends VisitDimension
elseif (!empty($referrerUrl)) { elseif (!empty($referrerUrl)) {
$idSite = $request->getIdSite(); $idSite = $request->getIdSite();
$referrer = $this->getReferrerInformation($referrerUrl, $currentUrl = '', $idSite); $referrer = $this->getReferrerInformation($referrerUrl, $currentUrl = '', $idSite, $request);
// if the parsed referrer is interesting enough, ie. website or search engine // if the parsed referrer is interesting enough, ie. website or search engine
if (in_array($referrer['referer_type'], array(Common::REFERRER_TYPE_SEARCH_ENGINE, Common::REFERRER_TYPE_WEBSITE))) { if (in_array($referrer['referer_type'], array(Common::REFERRER_TYPE_SEARCH_ENGINE, Common::REFERRER_TYPE_WEBSITE))) {
...@@ -432,4 +455,9 @@ abstract class Base extends VisitDimension ...@@ -432,4 +455,9 @@ abstract class Base extends VisitDimension
{ {
return $visitor->getVisitorColumn('referer_type') == $referrerType; return $visitor->getVisitorColumn('referer_type') == $referrerType;
} }
protected function getReferrerCampaignQueryParam(Request $request, $paramName)
{
return trim(urldecode($request->getParam($paramName)));
}
} }
...@@ -51,6 +51,10 @@ class SomeVisitsCustomVariablesCampaignsNotHeuristics extends Fixture ...@@ -51,6 +51,10 @@ class SomeVisitsCustomVariablesCampaignsNotHeuristics extends Fixture
if (!self::goalExists($idSite = 1, $idGoal = 1)) { if (!self::goalExists($idSite = 1, $idGoal = 1)) {
API::getInstance()->addGoal($this->idSite, 'triggered js', 'manually', '', ''); API::getInstance()->addGoal($this->idSite, 'triggered js', 'manually', '', '');
} }
if (!self::goalExists($idSite = 1, $idGoal = 2)) {
API::getInstance()->addGoal($this->idSite, 'view act', 'url', 'http://mutantregistration.com/act.html', 'exact');
}
} }
private function trackVisits() private function trackVisits()
...@@ -177,6 +181,29 @@ class SomeVisitsCustomVariablesCampaignsNotHeuristics extends Fixture ...@@ -177,6 +181,29 @@ class SomeVisitsCustomVariablesCampaignsNotHeuristics extends Fixture
$t4->setUrlReferrer('http://mutantregistration.com'); $t4->setUrlReferrer('http://mutantregistration.com');
$t4->setUrl('http://example.org/index.html'); $t4->setUrl('http://example.org/index.html');
self::checkResponse($t4->doTrackPageView('העלא וועלט')); self::checkResponse($t4->doTrackPageView('העלא וועלט'));
// test campaigns that are specified through _rcn
$t5 = self::getTracker($idSite, $dateTime);
$t5->setUrlReferrer('http://xavierinstitute.org');
$t5->setUrl('http://mutantregistration.com/act.html');
$t5->setAttributionInfo(json_encode(array('Gifted Search'))); // rcn supplied, nothing else
self::checkResponse($t5->doTrackPageView('Mutant Registration'));
$t5->setForceVisitDateTime(Date::factory($dateTime)->addHour(1)->getDatetime());
$t5->setUrlReferrer('http://mutantrights.org');
$t5->setUrl('http://asteroidm.com');
// all params suppplied, one that differs from url referrer
$t5->setAttributionInfo(json_encode(array('Recruiting Drive', 'am i a mutant?',
Date::factory($dateTime)->addHour(1)->getDatetime(), 'http://sentinelwatch.org')));
self::checkResponse($t5->doTrackPageView('Fighting Back'));
$t5->setForceVisitDateTime(Date::factory($dateTime)->addHour(2)->getDatetime());
$t5->setUrlReferrer('http://apocalypsenow.org');
$t5->setUrl('http://mutantrights.org');
// params supplied, for existing campaign
$t5->setAttributionInfo(json_encode(array('GA Campaign', 'some keyword',
Date::factory($dateTime)->addHour(2)->getDatetime())));
self::checkResponse($t5->doTrackPageView('Mutant Registration'));
} }
// see updateDomainHash() in piwik.js // see updateDomainHash() in piwik.js
......
...@@ -19,6 +19,9 @@ use Piwik\Tests\Fixtures\SomeVisitsCustomVariablesCampaignsNotHeuristics; ...@@ -19,6 +19,9 @@ use Piwik\Tests\Fixtures\SomeVisitsCustomVariablesCampaignsNotHeuristics;
*/ */
class TrackCustomVariablesAndCampaignsForceUsingVisitIdNotHeuristicsTest extends SystemTestCase class TrackCustomVariablesAndCampaignsForceUsingVisitIdNotHeuristicsTest extends SystemTestCase
{ {
/**
* @var SomeVisitsCustomVariablesCampaignsNotHeuristics
*/
public static $fixture = null; // initialized below class definition public static $fixture = null; // initialized below class definition
/** /**
......
...@@ -2,13 +2,13 @@ ...@@ -2,13 +2,13 @@
<result> <result>
<row> <row>
<label>ga campaign</label> <label>ga campaign</label>
<nb_uniq_visitors>4</nb_uniq_visitors> <nb_uniq_visitors>5</nb_uniq_visitors>
<nb_visits>4</nb_visits> <nb_visits>5</nb_visits>
<nb_actions>4</nb_actions> <nb_actions>5</nb_actions>
<nb_users>0</nb_users> <nb_users>0</nb_users>
<max_actions>1</max_actions> <max_actions>1</max_actions>
<sum_visit_length>1084</sum_visit_length> <sum_visit_length>1084</sum_visit_length>
<bounce_count>4</bounce_count> <bounce_count>5</bounce_count>
<goals> <goals>
<row idgoal='1'> <row idgoal='1'>
<nb_conversions>1</nb_conversions> <nb_conversions>1</nb_conversions>
...@@ -39,6 +39,17 @@ ...@@ -39,6 +39,17 @@
<nb_conversions>1</nb_conversions> <nb_conversions>1</nb_conversions>
<revenue>42.26</revenue> <revenue>42.26</revenue>
</row> </row>
<row>
<label>some keyword</label>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_visits>1</nb_visits>
<nb_actions>1</nb_actions>
<nb_users>0</nb_users>
<max_actions>1</max_actions>
<sum_visit_length>0</sum_visit_length>
<bounce_count>1</bounce_count>
<nb_visits_converted>0</nb_visits_converted>
</row>
<row> <row>
<label>thing1.com</label> <label>thing1.com</label>
<nb_uniq_visitors>1</nb_uniq_visitors> <nb_uniq_visitors>1</nb_uniq_visitors>
...@@ -231,4 +242,62 @@ ...@@ -231,4 +242,62 @@
</row> </row>
</subtable> </subtable>
</row> </row>
<row>
<label>gifted search</label>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_visits>1</nb_visits>
<nb_actions>1</nb_actions>
<nb_users>0</nb_users>
<max_actions>1</max_actions>
<sum_visit_length>1</sum_visit_length>
<bounce_count>1</bounce_count>
<goals>
<row idgoal='2'>
<nb_conversions>1</nb_conversions>
<nb_visits_converted>1</nb_visits_converted>
<revenue>0</revenue>
</row>
</goals>
<nb_conversions>1</nb_conversions>
<revenue>0</revenue>
<segment>referrerType==campaign;referrerName==gifted+search</segment>
<subtable>
<row>
<label>xavierinstitute.org</label>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_visits>1</nb_visits>
<nb_actions>1</nb_actions>
<nb_users>0</nb_users>
<max_actions>1</max_actions>
<sum_visit_length>1</sum_visit_length>
<bounce_count>1</bounce_count>
<nb_visits_converted>1</nb_visits_converted>
</row>
</subtable>
</row>
<row>
<label>recruiting drive</label>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_visits>1</nb_visits>
<nb_actions>1</nb_actions>
<nb_users>0</nb_users>
<max_actions>1</max_actions>
<sum_visit_length>0</sum_visit_length>
<bounce_count>1</bounce_count>
<nb_visits_converted>0</nb_visits_converted>
<segment>referrerType==campaign;referrerName==recruiting+drive</segment>
<subtable>
<row>
<label>am i a mutant?</label>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_visits>1</nb_visits>
<nb_actions>1</nb_actions>
<nb_users>0</nb_users>
<max_actions>1</max_actions>
<sum_visit_length>0</sum_visit_length>
<bounce_count>1</bounce_count>
<nb_visits_converted>0</nb_visits_converted>
</row>
</subtable>
</row>
</result> </result>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" ?> <?xml version="1.0" encoding="utf-8" ?>
<result> <result>
<nb_uniq_visitors>3</nb_uniq_visitors> <nb_uniq_visitors>4</nb_uniq_visitors>
<nb_users>0</nb_users> <nb_users>0</nb_users>
<nb_visits>15</nb_visits> <nb_visits>18</nb_visits>
<nb_actions>14</nb_actions> <nb_actions>17</nb_actions>
<nb_visits_converted>3</nb_visits_converted> <nb_visits_converted>4</nb_visits_converted>
<bounce_count>14</bounce_count> <bounce_count>17</bounce_count>
<sum_visit_length>1448</sum_visit_length> <sum_visit_length>1449</sum_visit_length>
<max_actions>2</max_actions> <max_actions>2</max_actions>
<bounce_rate>93%</bounce_rate> <bounce_rate>94%</bounce_rate>
<nb_actions_per_visit>0.9</nb_actions_per_visit> <nb_actions_per_visit>0.9</nb_actions_per_visit>
<avg_time_on_site>97</avg_time_on_site> <avg_time_on_site>81</avg_time_on_site>
</result> </result>
\ No newline at end of file
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter