From d4e25a15bb944659324e85d8b3231ce556919109 Mon Sep 17 00:00:00 2001 From: Thomas Steur Date: Mon, 9 Nov 2015 12:20:14 +1300 Subject: [PATCH] Added possibility to set custom tracking parameters for 3rd party plugins --- PiwikTracker.php | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/PiwikTracker.php b/PiwikTracker.php index 7e96fde..ebd0115 100644 --- a/PiwikTracker.php +++ b/PiwikTracker.php @@ -89,6 +89,7 @@ public function __construct($idSite, $apiUrl = '') $this->forcedNewVisit = false; $this->generationTime = false; $this->pageCustomVar = false; + $this->customParameters = array(); $this->customData = false; $this->hasCookies = false; $this->token_auth = false; @@ -308,6 +309,28 @@ public function clearCustomVariables() $this->eventCustomVar = array(); } + /** + * Sets a custom tracking parameter. This is useful if you need to send any tracking parameters for a 3rd party + * plugin that is not shipped with Piwik itself. Please note that custom parameters are cleared after each + * tracking request. + * + * @param string $trackingApiParameter The name of the tracking API parameter, eg 'dimension1' + * @param string $value Tracking parameter value that shall be sent for this tracking parameter. + * @throws Exception + */ + public function setCustomTrackingParameter($trackingApiParameter, $value) + { + $this->customParameters[$trackingApiParameter] = $value; + } + + /** + * Clear / reset all previously set custom tracking parameters. + */ + public function clearCustomTrackingParameters() + { + $this->customParameters = array(); + } + /** * Sets the current visitor ID to a random new one. */ @@ -1396,6 +1419,7 @@ protected function sendRequest($url, $method = 'GET', $data = null, $force = fal // Clear custom variables so they don't get copied over to other users in the bulk request $this->clearCustomVariables(); + $this->clearCustomTrackingParameters(); $this->userAgent = false; $this->acceptLanguage = false; @@ -1505,6 +1529,13 @@ protected function getRequest($idSite) { $this->setFirstPartyCookies(); + $customFields = ''; + if (!empty($this->customParameters)) { + foreach ($this->customParameters as $parameter => $value) { + $customFields .= '&' . urlencode($parameter) . '=' . urlencode($value); + } + } + $url = $this->getBaseUrl() . '?idsite=' . $idSite . '&rec=1' . @@ -1568,6 +1599,7 @@ protected function getRequest($idSite) (!empty($this->city) ? '&city=' . urlencode($this->city) : '') . (!empty($this->lat) ? '&lat=' . urlencode($this->lat) : '') . (!empty($this->long) ? '&long=' . urlencode($this->long) : '') . + $customFields . (!$this->sendImageResponse ? '&send_image=0' : '') . // DEBUG @@ -1577,6 +1609,7 @@ protected function getRequest($idSite) // Reset page level custom variables after this page view $this->pageCustomVar = array(); $this->eventCustomVar = array(); + $this->clearCustomTrackingParameters(); // force new visit only once, user must call again setForceNewVisit() $this->forcedNewVisit = false; @@ -1811,4 +1844,4 @@ function Piwik_getUrlTrackGoal($idSite, $idGoal, $revenue = 0.0) $tracker = new PiwikTracker($idSite); return $tracker->getUrlTrackGoal($idGoal, $revenue); -} +} \ No newline at end of file