diff --git a/core/Tracker/Visit.php b/core/Tracker/Visit.php index cb23baeb6fbe1c1065481672527e2728bb613e47..0078ec39314cb888d5743efad8d5db99b2ca235a 100644 --- a/core/Tracker/Visit.php +++ b/core/Tracker/Visit.php @@ -1427,45 +1427,66 @@ class Piwik_Tracker_Visit_Referer return true; } - /* - * Campaign analysis - */ - protected function detectRefererCampaign() + protected function detectCampaignFromString($string) { - if(isset($this->currentUrlParse['query'])) + foreach($this->campaignNames as $campaignNameParameter) { - $campaignParameters = Piwik_Common::getCampaignParameters(); - - $campaignNames = $campaignParameters[0]; - foreach($campaignNames as $campaignNameParameter) + $campaignName = trim(urldecode(Piwik_Common::getParameterFromQueryString($string, $campaignNameParameter))); + if( !empty($campaignName)) { - $campaignName = trim(urldecode(Piwik_Common::getParameterFromQueryString($this->currentUrlParse['query'], $campaignNameParameter))); - if( !empty($campaignName)) - { - break; - } + break; } + } - if(!empty($campaignName)) - { - $this->typeRefererAnalyzed = Piwik_Common::REFERER_TYPE_CAMPAIGN; - $this->nameRefererAnalyzed = $campaignName; + if(!empty($campaignName)) + { + $this->typeRefererAnalyzed = Piwik_Common::REFERER_TYPE_CAMPAIGN; + $this->nameRefererAnalyzed = $campaignName; - $campaignKeywords = $campaignParameters[1]; - foreach($campaignKeywords as $campaignKeywordParameter) + foreach($this->campaignKeywords as $campaignKeywordParameter) + { + $campaignKeyword = Piwik_Common::getParameterFromQueryString($string, $campaignKeywordParameter); + if( !empty($campaignKeyword)) { - $campaignKeyword = Piwik_Common::getParameterFromQueryString($this->currentUrlParse['query'], $campaignKeywordParameter); - if( !empty($campaignKeyword)) - { - $this->keywordRefererAnalyzed = trim(urldecode($campaignKeyword)); - break; - } + $this->keywordRefererAnalyzed = trim(urldecode($campaignKeyword)); + break; } - return true; } + return true; } return false; } + + /* + * Campaign analysis + */ + protected function detectRefererCampaign() + { + if(!isset($this->currentUrlParse['query']) + && !isset($this->currentUrlParse['fragment'])) + { + return false; + } + $campaignParameters = Piwik_Common::getCampaignParameters(); + $this->campaignNames = $campaignParameters[0]; + $this->campaignKeywords = $campaignParameters[1]; + + $found = false; + + // 1) Detect campaign from query string + if(isset($this->currentUrlParse['query'])) + { + $found = $this->detectCampaignFromString($this->currentUrlParse['query']); + } + + // 2) Detect from fragment #hash + if(!$found + && isset($this->currentUrlParse['fragment'])) + { + $found = $this->detectCampaignFromString($this->currentUrlParse['fragment']); + } + return $found; + } /* * We have previously tried to detect the campaign variables in the URL diff --git a/plugins/CoreHome/templates/header.tpl b/plugins/CoreHome/templates/header.tpl index 239b956bc9a1d12f23ff9474b215ba5279b88098..fd4fe450a5ceddf3bcec3a571f4277ecf851382b 100644 --- a/plugins/CoreHome/templates/header.tpl +++ b/plugins/CoreHome/templates/header.tpl @@ -1,5 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>{if !$isCustomLogo}Piwik › {/if} {'CoreHome_WebAnalyticsReports'|translate} - {$siteName}</title> diff --git a/plugins/Live/templates/visitorLog.tpl b/plugins/Live/templates/visitorLog.tpl index 0ef46a0349fe36e6b801e5c528647f37081d0aa8..7e2b4d7b934f471eb4e54c93e44787a2f3077671 100644 --- a/plugins/Live/templates/visitorLog.tpl +++ b/plugins/Live/templates/visitorLog.tpl @@ -223,7 +223,7 @@ {else} {* Goal conversion *} <img src="{$action.icon}" /> - <strong>{$action.goalName}</strong> + <strong>{$action.goalName|escape:'html'}</strong> {if $action.revenue > 0}, {'Live_GoalRevenue'|translate}: <strong>{$action.revenue|money:$javascriptVariablesToSet.idSite}</strong>{/if} {/if} </li> diff --git a/tests/integration/TrackCustomVariablesAndCampaigns_ForceUsingVisitIdNotHeuristics.test.php b/tests/integration/TrackCustomVariablesAndCampaigns_ForceUsingVisitIdNotHeuristics.test.php index b1226a46feda1b44b97391556bd27d56aff9094a..8d9fe5be9f200f89b553c872cb27811e2bfb0439 100755 --- a/tests/integration/TrackCustomVariablesAndCampaigns_ForceUsingVisitIdNotHeuristics.test.php +++ b/tests/integration/TrackCustomVariablesAndCampaigns_ForceUsingVisitIdNotHeuristics.test.php @@ -53,7 +53,7 @@ class Test_Piwik_Integration_TrackCustomVariablesAndCampaigns_ForceUsingVisitIdN $t = $this->getTracker($idSite, $dateTime, $defaultInit = true); // Record 1st page view - $t->setUrl( 'http://example.org/index.htm?utm_campaign=GA Campaign&piwik_kwd=Piwik kwd&utm_term=GA keyword SHOULD NOT DISPLAY' ); + $t->setUrl( 'http://example.org/index.htm?utm_campaign=GA Campaign&piwik_kwd=Piwik kwd&utm_term=GA keyword SHOULD NOT DISPLAY#pk_campaign=NOT TRACKED!!&pk_kwd=NOT TRACKED!!' ); $this->checkResponse($t->doTrackPageView( 'incredible title!')); $visitorId = $t->getVisitorId(); @@ -96,7 +96,7 @@ class Test_Piwik_Integration_TrackCustomVariablesAndCampaigns_ForceUsingVisitIdN $t3->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(1.3)->getDatetime()); // fake a website ref cookie, the campaign should be credited for conversion, not referrer.example.com nor example.org $t3->DEBUG_APPEND_URL = '&_ref=http%3A%2F%2Freferrer.example.com%2Fpage%2Fsub%3Fquery%3Dtest%26test2%3Dtest3'; - $t3->setUrl( 'http://example.org/index.htm?pk_campaign=CREDITED TO GOAL PLEASE' ); + $t3->setUrl( 'http://example.org/index.htm#pk_campaign=CREDITED TO GOAL PLEASE' ); $this->checkResponse($t3->doTrackGoal($idGoal, 42)); } }