Skip to content

Commit

Permalink
Merge pull request #127 from claytondaley/api-javascript-tag-options
Browse files Browse the repository at this point in the history
Add parameters to getJavascriptTag API call Fixes #4247
  • Loading branch information
Matthieu Aubry committed Oct 28, 2013
2 parents a5ff495 + 98a6ae5 commit de56af3
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 4 deletions.
52 changes: 50 additions & 2 deletions core/Piwik.php
Expand Up @@ -17,6 +17,7 @@

use Piwik\Plugin;
use Piwik\Plugins\UsersManager\API;
use Piwik\Plugins\SitesManager\API as APISitesManager;
use Piwik\Session;
use Piwik\Tracker;
use Piwik\View;
Expand Down Expand Up @@ -124,14 +125,61 @@ static public function getPercentageSafe($dividend, $divisor, $precision = 0)
* @param string $piwikUrl http://path/to/piwik/directory/
* @return string
*/
static public function getJavascriptCode($idSite, $piwikUrl)
static public function getJavascriptCode($idSite, $piwikUrl, $mergeSubdomains = false, $groupPageTitlesByDomain = false, $mergeAliasUrls = false, $visitorCustomVariables = false, $pageCustomVariables = false, $customCampaignNameQueryParam = false, $customCampaignKeywordParam = false, $doNotTrack = false)
{
// changes made to this code should be mirrored in plugins/CoreAdminHome/javascripts/jsTrackingGenerator.js var generateJsCode
$jsCode = file_get_contents(PIWIK_INCLUDE_PATH . "/plugins/Zeitgeist/templates/javascriptCode.tpl");
$jsCode = htmlentities($jsCode);
preg_match('~^(http|https)://(.*)$~D', $piwikUrl, $matches);
$piwikUrl = @$matches[2];
$jsCode = str_replace('{$idSite}', $idSite, $jsCode);
$jsCode = str_replace('{$piwikUrl}', Common::sanitizeInputValue($piwikUrl), $jsCode);
// Build optional parameters to be added to text
$options = '';
if ($groupPageTitlesByDomain) {
$options .= PHP_EOL . ' _paq.push(["setDocumentTitle", document.domain + "/" + document.title]);' . PHP_EOL;
}
if ($mergeSubdomains || $mergeAliasUrls) {
// Both flags need URL data
$site_urls = APISitesManager::getInstance()->getSiteUrlsFromId( $idSite );
// We need to parse_url to isolate hosts
$site_hosts = array ();
foreach ($site_urls as $site_url) {
$referrerParsed = parse_url($site_url);
array_push($site_hosts, $referrerParsed['host']);
}
}
if ($mergeSubdomains) {
$options .= PHP_EOL . ' _paq.push(["setCookieDomain", "*.' . $site_hosts[0] . '"]);' . PHP_EOL;
}
if ($mergeAliasUrls) {
$urls = '["*.'.implode('","*.',$site_hosts).'"]';
$options .= ' _paq.push(["setDomains", '.$urls.']);' . PHP_EOL;
}
if ($visitorCustomVariables) {
$options .= '// you can set up to 5 custom variables for each visitor' . PHP_EOL;
$index = 0;
foreach ($visitorCustomVariables as $visitorCustomVariable) {
$options .= ' _paq.push(["setCustomVariable", '.$index++.', "'.$visitorCustomVariable[0].'", "'.$visitorCustomVariable[1].'", "visitor"]);' . PHP_EOL;
}
}
if ($pageCustomVariables) {
$options .= ' // you can set up to 5 custom variables for each action (page view, download, click, site search)' . PHP_EOL;
$index = 0;
foreach ($pageCustomVariables as $pageCustomVariable) {
$options .= ' _paq.push(["setCustomVariable", '.$index++.', "'.$pageCustomVariable[0].'", "'.$pageCustomVariable[1].'", "page"]);' . PHP_EOL;
}
}
if ($customCampaignNameQueryParam) {
$options .= ' _paq.push(["setCampaignNameKey", "'.$customCampaignNameQueryParam.'"]);' . PHP_EOL;
}
if ($customCampaignKeywordParam) {
$options .= ' _paq.push(["setCampaignKeywordKey", "'.$customCampaignKeywordParam.'"]);' . PHP_EOL;
}
if ($doNotTrack) {
$options .= ' _paq.push(["setDoNotTrack", true]);' . PHP_EOL;
}
$jsCode = str_replace('{$options}'.PHP_EOL, $options, $jsCode);
return $jsCode;
}

Expand Down Expand Up @@ -720,4 +768,4 @@ public static function translateException($message, $args = array())
return $message;
}
}
}
}
1 change: 1 addition & 0 deletions plugins/CoreAdminHome/javascripts/jsTrackingGenerator.js
Expand Up @@ -212,6 +212,7 @@
var idSite = params.idSite;

// generate JS
// changes made to this code should be mirrored in core/Piwik.php function getJavascriptCode()
var result = '<!-- Piwik -->\n\
<script type="text/javascript">\n\
var _paq = _paq || [];\n';
Expand Down
4 changes: 2 additions & 2 deletions plugins/SitesManager/API.php
Expand Up @@ -65,7 +65,7 @@ class API extends \Piwik\Plugin\API
* @param string $piwikUrl
* @return string The Javascript tag ready to be included on the HTML pages
*/
public function getJavascriptTag($idSite, $piwikUrl = '')
public function getJavascriptTag($idSite, $piwikUrl = '', $mergeSubdomains = false, $groupPageTitlesByDomain = false, $mergeAliasUrls = false, $visitorCustomVariables = false, $pageCustomVariables = false, $customCampaignNameQueryParam = false, $customCampaignKeywordParam = false, $doNotTrack = false)
{
Piwik::checkUserHasViewAccess($idSite);

Expand All @@ -74,7 +74,7 @@ public function getJavascriptTag($idSite, $piwikUrl = '')
}
$piwikUrl = Common::sanitizeInputValues($piwikUrl);

$htmlEncoded = Piwik::getJavascriptCode($idSite, $piwikUrl);
$htmlEncoded = Piwik::getJavascriptCode($idSite, $piwikUrl, $mergeSubdomains, $groupPageTitlesByDomain, $mergeAliasUrls, $visitorCustomVariables, $pageCustomVariables, $customCampaignNameQueryParam, $customCampaignKeywordParam, $doNotTrack);
$htmlEncoded = str_replace(array('<br>', '<br />', '<br/>'), '', $htmlEncoded);
return $htmlEncoded;
}
Expand Down
1 change: 1 addition & 0 deletions plugins/Zeitgeist/templates/javascriptCode.tpl
@@ -1,6 +1,7 @@
<!-- Piwik -->
<script type="text/javascript">
var _paq = _paq || [];
{$options}
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
Expand Down

0 comments on commit de56af3

Please sign in to comment.