Skip to content
Extraits de code Groupes Projets
Valider cb53100e rédigé par Thomas Steur's avatar Thomas Steur
Parcourir les fichiers

refs #10797 improve default tracking code

parent b5c4385a
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -101,7 +101,8 @@ Read more about migrating a plugin from Piwik 2.X to Piwik 3 on our [Migration g ...@@ -101,7 +101,8 @@ Read more about migrating a plugin from Piwik 2.X to Piwik 3 on our [Migration g
* `Updater.componentUninstalled` triggered after a component was uninstalled * `Updater.componentUninstalled` triggered after a component was uninstalled
* New HTTP Tracking API parameter `pv_id` which accepts a six character unique ID that identifies which actions were performed on a specific page view. Read more about it in the [HTTP Tracking API](https://developer.piwik.org/api-reference/tracking-api); * New HTTP Tracking API parameter `pv_id` which accepts a six character unique ID that identifies which actions were performed on a specific page view. Read more about it in the [HTTP Tracking API](https://developer.piwik.org/api-reference/tracking-api);
* New event `Segment.addSegments` that lets you add segments. * New event `Segment.addSegments` that lets you add segments.
* New Piwik JavaScript Tracker method `disableHeartBeatTimer()` to disable the heartbeat timer if it was previously enabled. * New Piwik JavaScript Tracker method `disableHeartBeatTimer()` to disable the heartbeat timer if it was previously enabled.
* The `SitesManager.getJavascriptTag` has a new option `getJavascriptTag` to enable the tracking of users that have JavaScript disabled
### New features ### New features
* New "Sparklines" visualization that lets you create a widget showing multiple sparklines. * New "Sparklines" visualization that lets you create a widget showing multiple sparklines.
......
...@@ -31,6 +31,7 @@ class TrackerCodeGenerator ...@@ -31,6 +31,7 @@ class TrackerCodeGenerator
* @param string $customCampaignKeywordParam * @param string $customCampaignKeywordParam
* @param bool $doNotTrack * @param bool $doNotTrack
* @param bool $disableCookies * @param bool $disableCookies
* @param bool $trackNoScript
* @return string Javascript code. * @return string Javascript code.
*/ */
public function generate( public function generate(
...@@ -44,7 +45,8 @@ class TrackerCodeGenerator ...@@ -44,7 +45,8 @@ class TrackerCodeGenerator
$customCampaignNameQueryParam = null, $customCampaignNameQueryParam = null,
$customCampaignKeywordParam = null, $customCampaignKeywordParam = null,
$doNotTrack = false, $doNotTrack = false,
$disableCookies = false $disableCookies = false,
$trackNoScript = false
) { ) {
// changes made to this code should be mirrored in plugins/CoreAdminHome/javascripts/jsTrackingGenerator.js var generateJsCode // changes made to this code should be mirrored in plugins/CoreAdminHome/javascripts/jsTrackingGenerator.js var generateJsCode
...@@ -120,7 +122,8 @@ class TrackerCodeGenerator ...@@ -120,7 +122,8 @@ class TrackerCodeGenerator
'options' => $options, 'options' => $options,
'optionsBeforeTrackerUrl' => $optionsBeforeTrackerUrl, 'optionsBeforeTrackerUrl' => $optionsBeforeTrackerUrl,
'protocol' => '//', 'protocol' => '//',
'loadAsync' => true 'loadAsync' => true,
'trackNoScript' => $trackNoScript
); );
$parameters = compact('mergeSubdomains', 'groupPageTitlesByDomain', 'mergeAliasUrls', 'visitorCustomVariables', $parameters = compact('mergeSubdomains', 'groupPageTitlesByDomain', 'mergeAliasUrls', 'visitorCustomVariables',
'pageCustomVariables', 'customCampaignNameQueryParam', 'customCampaignKeywordParam', 'pageCustomVariables', 'customCampaignNameQueryParam', 'customCampaignKeywordParam',
...@@ -161,6 +164,7 @@ class TrackerCodeGenerator ...@@ -161,6 +164,7 @@ class TrackerCodeGenerator
$view = new View('@Morpheus/javascriptCode'); $view = new View('@Morpheus/javascriptCode');
$view->disableCacheBuster(); $view->disableCacheBuster();
$view->loadAsync = $codeImpl['loadAsync']; $view->loadAsync = $codeImpl['loadAsync'];
$view->trackNoScript = $codeImpl['trackNoScript'];
$jsCode = $view->render(); $jsCode = $view->render();
$jsCode = htmlentities($jsCode); $jsCode = htmlentities($jsCode);
......
...@@ -84,7 +84,8 @@ ...@@ -84,7 +84,8 @@
customCampaignNameQueryParam: null, customCampaignNameQueryParam: null,
customCampaignKeywordParam: null, customCampaignKeywordParam: null,
doNotTrack: self.doNotTrack ? 1 : 0, doNotTrack: self.doNotTrack ? 1 : 0,
disableCookies: self.disableCookies ? 1 : 0 disableCookies: self.disableCookies ? 1 : 0,
trackNoScript: self.trackNoScript ? 1: 0
}; };
if (self.useCustomCampaignParams) { if (self.useCustomCampaignParams) {
......
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
"JSTracking_MergeSubdomainsDesc": "So if one visitor visits %1$s and %2$s, they will be counted as a unique visitor.", "JSTracking_MergeSubdomainsDesc": "So if one visitor visits %1$s and %2$s, they will be counted as a unique visitor.",
"JSTracking_PageCustomVars": "Track a custom variable for each page view", "JSTracking_PageCustomVars": "Track a custom variable for each page view",
"JSTracking_PageCustomVarsDesc": "For example, with variable name \"Category\" and value \"White Papers\".", "JSTracking_PageCustomVarsDesc": "For example, with variable name \"Category\" and value \"White Papers\".",
"JSTracking_TrackNoScript": "Track users with JavaScript disabled",
"JSTracking_VisitorCustomVars": "Track custom variables for this visitor", "JSTracking_VisitorCustomVars": "Track custom variables for this visitor",
"JSTracking_VisitorCustomVarsDesc": "For example, with variable name \"Type\" and value \"Customer\".", "JSTracking_VisitorCustomVarsDesc": "For example, with variable name \"Type\" and value \"Customer\".",
"JSTrackingIntro1": "You can track visitors to your website many different ways. The recommended way to do it is through JavaScript. To use this method you must make sure every webpage of your website has some JavaScript code, which you can generate here.", "JSTrackingIntro1": "You can track visitors to your website many different ways. The recommended way to do it is through JavaScript. To use this method you must make sure every webpage of your website has some JavaScript code, which you can generate here.",
......
...@@ -80,6 +80,14 @@ ...@@ -80,6 +80,14 @@
value="" inline-help="#jsTrackAllAliasesInlineHelp"> value="" inline-help="#jsTrackAllAliasesInlineHelp">
</div> </div>
<div piwik-field uicontrol="checkbox" name="javascript-tracking-noscript"
ng-model="jsTrackingCode.trackNoScript"
ng-change="jsTrackingCode.updateTrackingCode()"
disabled="jsTrackingCode.isLoading"
title="{{ 'CoreAdminHome_JSTracking_TrackNoScript'|translate|e('html_attr') }}"
value="" inline-help="">
</div>
<h3>{{ 'Mobile_Advanced'|translate }}</h3> <h3>{{ 'Mobile_Advanced'|translate }}</h3>
<p> <p>
......
<!-- Piwik --> <!-- Piwik -->
<script type="text/javascript"> <script type="text/javascript">
var _paq = _paq || []; var _paq = _paq || [];
// tracker methods like "setCustomDimension" should be called before "trackPageView"
{$options} _paq.push(['trackPageView']); {$options} _paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']); _paq.push(['enableLinkTracking']);
(function() { (function() {
...@@ -14,5 +15,6 @@ ...@@ -14,5 +15,6 @@
</script> </script>
{% if not loadAsync %}<script type='text/javascript' src="{$protocol}{$piwikUrl}/piwik.js"></script> {% if not loadAsync %}<script type='text/javascript' src="{$protocol}{$piwikUrl}/piwik.js"></script>
{% endif %} {% endif %}
<noscript><p><img src="{$protocol}{$piwikUrl}/piwik.php?idsite={$idSite}" style="border:0;" alt="" /></p></noscript> {% if trackNoScript %}<noscript><p><img src="{$protocol}{$piwikUrl}/piwik.php?idsite={$idSite}&rec=1" style="border:0;" alt="" /></p></noscript>
{% endif %}
<!-- End Piwik Code --> <!-- End Piwik Code -->
...@@ -95,12 +95,13 @@ class API extends \Piwik\Plugin\API ...@@ -95,12 +95,13 @@ class API extends \Piwik\Plugin\API
* @param bool $customCampaignKeywordParam * @param bool $customCampaignKeywordParam
* @param bool $doNotTrack * @param bool $doNotTrack
* @param bool $disableCookies * @param bool $disableCookies
* @param bool $trackNoScript
* @return string The Javascript tag ready to be included on the HTML pages * @return string The Javascript tag ready to be included on the HTML pages
*/ */
public function getJavascriptTag($idSite, $piwikUrl = '', $mergeSubdomains = false, $groupPageTitlesByDomain = false, public function getJavascriptTag($idSite, $piwikUrl = '', $mergeSubdomains = false, $groupPageTitlesByDomain = false,
$mergeAliasUrls = false, $visitorCustomVariables = false, $pageCustomVariables = false, $mergeAliasUrls = false, $visitorCustomVariables = false, $pageCustomVariables = false,
$customCampaignNameQueryParam = false, $customCampaignKeywordParam = false, $customCampaignNameQueryParam = false, $customCampaignKeywordParam = false,
$doNotTrack = false, $disableCookies = false) $doNotTrack = false, $disableCookies = false, $`` = false)
{ {
Piwik::checkUserHasViewAccess($idSite); Piwik::checkUserHasViewAccess($idSite);
...@@ -120,7 +121,7 @@ class API extends \Piwik\Plugin\API ...@@ -120,7 +121,7 @@ class API extends \Piwik\Plugin\API
$code = $generator->generate($idSite, $piwikUrl, $mergeSubdomains, $groupPageTitlesByDomain, $code = $generator->generate($idSite, $piwikUrl, $mergeSubdomains, $groupPageTitlesByDomain,
$mergeAliasUrls, $visitorCustomVariables, $pageCustomVariables, $mergeAliasUrls, $visitorCustomVariables, $pageCustomVariables,
$customCampaignNameQueryParam, $customCampaignKeywordParam, $customCampaignNameQueryParam, $customCampaignKeywordParam,
$doNotTrack, $disableCookies); $doNotTrack, $disableCookies, $trackNoScript);
$code = str_replace(array('<br>', '<br />', '<br/>'), '', $code); $code = str_replace(array('<br>', '<br />', '<br/>'), '', $code);
return $code; return $code;
} }
......
...@@ -26,11 +26,12 @@ class TrackerCodeGeneratorTest extends IntegrationTestCase ...@@ -26,11 +26,12 @@ class TrackerCodeGeneratorTest extends IntegrationTestCase
$visitorCustomVariables = array(array("name", "value"), array("name 2", "value 2")), $visitorCustomVariables = array(array("name", "value"), array("name 2", "value 2")),
$pageCustomVariables = array(array("page cvar", "page cvar value")), $pageCustomVariables = array(array("page cvar", "page cvar value")),
$customCampaignNameQueryParam = "campaignKey", $customCampaignKeywordParam = "keywordKey", $customCampaignNameQueryParam = "campaignKey", $customCampaignKeywordParam = "keywordKey",
$doNotTrack = true); $doNotTrack = true, $disableCookies = false, $trackNoScript = true);
$expected = "&lt;!-- Piwik --&gt; $expected = "&lt;!-- Piwik --&gt;
&lt;script type=&quot;text/javascript&quot;&gt; &lt;script type=&quot;text/javascript&quot;&gt;
var _paq = _paq || []; var _paq = _paq || [];
// tracker methods like &quot;setCustomDimension&quot; should be called before &quot;trackPageView&quot;
_paq.push([\"setDocumentTitle\", document.domain + \"/\" + document.title]); _paq.push([\"setDocumentTitle\", document.domain + \"/\" + document.title]);
// you can set up to 5 custom variables for each visitor // you can set up to 5 custom variables for each visitor
_paq.push([\"setCustomVariable\", 1, \"name\", \"value\", \"visit\"]); _paq.push([\"setCustomVariable\", 1, \"name\", \"value\", \"visit\"]);
...@@ -50,7 +51,33 @@ class TrackerCodeGeneratorTest extends IntegrationTestCase ...@@ -50,7 +51,33 @@ class TrackerCodeGeneratorTest extends IntegrationTestCase
g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s); g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
})(); })();
&lt;/script&gt; &lt;/script&gt;
&lt;noscript&gt;&lt;p&gt;&lt;img src=&quot;//localhost/piwik/piwik.php?idsite=1&quot; style=&quot;border:0;&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;&lt;/noscript&gt; &lt;noscript&gt;&lt;p&gt;&lt;img src=&quot;//localhost/piwik/piwik.php?idsite=1&amp;rec=1&quot; style=&quot;border:0;&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;&lt;/noscript&gt;
&lt;!-- End Piwik Code --&gt;
";
$this->assertEquals($expected, $jsTag);
}
public function testJavascriptTrackingCode_noScriptTrackingDisabled_defaultTrackingCode()
{
$generator = new TrackerCodeGenerator();
$jsTag = $generator->generate($idSite = 1, $piwikUrl = 'http://localhost/piwik');
$expected = "&lt;!-- Piwik --&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
var _paq = _paq || [];
// tracker methods like &quot;setCustomDimension&quot; should be called before &quot;trackPageView&quot;
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u=&quot;//localhost/piwik/&quot;;
_paq.push(['setTrackerUrl', u+'piwik.php']);
_paq.push(['setSiteId', '1']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
})();
&lt;/script&gt;
&lt;!-- End Piwik Code --&gt; &lt;!-- End Piwik Code --&gt;
"; ";
...@@ -78,6 +105,7 @@ class TrackerCodeGeneratorTest extends IntegrationTestCase ...@@ -78,6 +105,7 @@ class TrackerCodeGeneratorTest extends IntegrationTestCase
$expected = "&lt;!-- Piwik --&gt; $expected = "&lt;!-- Piwik --&gt;
&lt;script type=&quot;text/javascript&quot;&gt; &lt;script type=&quot;text/javascript&quot;&gt;
var _paq = _paq || []; var _paq = _paq || [];
// tracker methods like &quot;setCustomDimension&quot; should be called before &quot;trackPageView&quot;
_paq.push([\"setDocumentTitle\", document.domain + \"/\" + document.title]); _paq.push([\"setDocumentTitle\", document.domain + \"/\" + document.title]);
// you can set up to 5 custom variables for each visitor // you can set up to 5 custom variables for each visitor
_paq.push([\"setCustomVariable\", 1, \"name\", \"value\", \"visit\"]); _paq.push([\"setCustomVariable\", 1, \"name\", \"value\", \"visit\"]);
...@@ -97,7 +125,6 @@ class TrackerCodeGeneratorTest extends IntegrationTestCase ...@@ -97,7 +125,6 @@ class TrackerCodeGeneratorTest extends IntegrationTestCase
g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s); g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
})(); })();
&lt;/script&gt; &lt;/script&gt;
&lt;noscript&gt;&lt;p&gt;&lt;img src=&quot;https://localhost/piwik/piwik.php?idsite=1&quot; style=&quot;border:0;&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;&lt;/noscript&gt;
&lt;!-- End Piwik Code --&gt; &lt;!-- End Piwik Code --&gt;
"; ";
...@@ -125,6 +152,7 @@ class TrackerCodeGeneratorTest extends IntegrationTestCase ...@@ -125,6 +152,7 @@ class TrackerCodeGeneratorTest extends IntegrationTestCase
$expected = "&lt;!-- Piwik --&gt; $expected = "&lt;!-- Piwik --&gt;
&lt;script type=&quot;text/javascript&quot;&gt; &lt;script type=&quot;text/javascript&quot;&gt;
var _paq = _paq || []; var _paq = _paq || [];
// tracker methods like &quot;setCustomDimension&quot; should be called before &quot;trackPageView&quot;
_paq.push([\"setDocumentTitle\", document.domain + \"/\" + document.title]); _paq.push([\"setDocumentTitle\", document.domain + \"/\" + document.title]);
// you can set up to 5 custom variables for each visitor // you can set up to 5 custom variables for each visitor
_paq.push([\"setCustomVariable\", 1, \"name\", \"value\", \"visit\"]); _paq.push([\"setCustomVariable\", 1, \"name\", \"value\", \"visit\"]);
...@@ -145,7 +173,6 @@ class TrackerCodeGeneratorTest extends IntegrationTestCase ...@@ -145,7 +173,6 @@ class TrackerCodeGeneratorTest extends IntegrationTestCase
g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s); g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
})(); })();
&lt;/script&gt; &lt;/script&gt;
&lt;noscript&gt;&lt;p&gt;&lt;img src=&quot;//localhost/piwik/piwik.php?idsite=1&quot; style=&quot;border:0;&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;&lt;/noscript&gt;
&lt;!-- End Piwik Code --&gt; &lt;!-- End Piwik Code --&gt;
"; ";
...@@ -169,6 +196,7 @@ class TrackerCodeGeneratorTest extends IntegrationTestCase ...@@ -169,6 +196,7 @@ class TrackerCodeGeneratorTest extends IntegrationTestCase
$expected = "&lt;!-- Piwik --&gt; $expected = "&lt;!-- Piwik --&gt;
&lt;script type=&quot;text/javascript&quot;&gt; &lt;script type=&quot;text/javascript&quot;&gt;
var _paq = _paq || []; var _paq = _paq || [];
// tracker methods like &quot;setCustomDimension&quot; should be called before &quot;trackPageView&quot;
_paq.push([\"setDocumentTitle\", document.domain + \"/\" + document.title]); _paq.push([\"setDocumentTitle\", document.domain + \"/\" + document.title]);
_paq.push(['trackPageView']); _paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']); _paq.push(['enableLinkTracking']);
...@@ -180,7 +208,6 @@ class TrackerCodeGeneratorTest extends IntegrationTestCase ...@@ -180,7 +208,6 @@ class TrackerCodeGeneratorTest extends IntegrationTestCase
})(); })();
&lt;/script&gt; &lt;/script&gt;
&lt;script type='text/javascript' src=&quot;//localhost/piwik/piwik.js&quot;&gt;&lt;/script&gt; &lt;script type='text/javascript' src=&quot;//localhost/piwik/piwik.js&quot;&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;p&gt;&lt;img src=&quot;//localhost/piwik/piwik.php?idsite=1&quot; style=&quot;border:0;&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;&lt;/noscript&gt;
&lt;!-- End Piwik Code --&gt; &lt;!-- End Piwik Code --&gt;
"; ";
...@@ -206,6 +233,7 @@ class TrackerCodeGeneratorTest extends IntegrationTestCase ...@@ -206,6 +233,7 @@ class TrackerCodeGeneratorTest extends IntegrationTestCase
$expected = '&lt;!-- Piwik --&gt; $expected = '&lt;!-- Piwik --&gt;
&lt;script type=&quot;text/javascript&quot;&gt; &lt;script type=&quot;text/javascript&quot;&gt;
var _paq = _paq || []; var _paq = _paq || [];
// tracker methods like &quot;setCustomDimension&quot; should be called before &quot;trackPageView&quot;
_paq.push(["setDocumentTitle", document.domain + "/" + document.title]); _paq.push(["setDocumentTitle", document.domain + "/" + document.title]);
// you can set up to 5 custom variables for each visitor // you can set up to 5 custom variables for each visitor
_paq.push(["setCustomVariable", 1, "abc\"def", "abc\"def", "visit"]); _paq.push(["setCustomVariable", 1, "abc\"def", "abc\"def", "visit"]);
...@@ -223,7 +251,6 @@ class TrackerCodeGeneratorTest extends IntegrationTestCase ...@@ -223,7 +251,6 @@ class TrackerCodeGeneratorTest extends IntegrationTestCase
g.type=\'text/javascript\'; g.async=true; g.defer=true; g.src=u+\'piwik.js\'; s.parentNode.insertBefore(g,s); g.type=\'text/javascript\'; g.async=true; g.defer=true; g.src=u+\'piwik.js\'; s.parentNode.insertBefore(g,s);
})(); })();
&lt;/script&gt; &lt;/script&gt;
&lt;noscript&gt;&lt;p&gt;&lt;img src=&quot;//abc&quot;def/piwik.php?idsite=1&quot; style=&quot;border:0;&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;&lt;/noscript&gt;
&lt;!-- End Piwik Code --&gt; &lt;!-- End Piwik Code --&gt;
'; ';
......
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