Asynchronous tracking code for Piwik.

Add an option to use asynchronous tracking code for Piwik:
http://piwik.org/docs/javascript-tracking/#toc-asynchronous-tracking

Fixed a small bug with the trailing slash in the traditional tracking code in the noscript part.
Changed visible occurances piwik --> Piwik.
Add help text for baseurl.
This commit is contained in:
Klaus Weidenbach 2012-02-19 10:17:38 +01:00
parent 1dbc7fc340
commit 7360ccafe7
3 changed files with 51 additions and 36 deletions

View file

@ -3,7 +3,7 @@ by Tobias Diekershoff
tobias.diekershoff(at)gmx.net tobias.diekershoff(at)gmx.net
This addon allows you to embed the code necessary for the FLOSS webanalytics This addon allows you to embed the code necessary for the FLOSS webanalytics
tool piwik into the Friendica pages. tool Piwik into the Friendica pages.
Online version of this Document: http://ur1.ca/35m2x Online version of this Document: http://ur1.ca/35m2x
@ -20,17 +20,18 @@ ___ Configuration ___
Open the .htconfig.php file and add "piwik" to the list of activated addons. Open the .htconfig.php file and add "piwik" to the list of activated addons.
$a->config['system']['addon'] = "piwik, ..." $a->config['system']['addon'] = "piwik, ..."
You have to add 3 more configuration variables for the addon:
$a->config['piwik']['baseurl'] = 'example.com/piwik/'; You have to add 4 more configuration variables for the addon:
$a->config['piwik']['sideid'] = '1'; $a->config['piwik']['baseurl'] = 'example.com/piwik/';
$a->config['piwik']['optout'] = true; $a->config['piwik']['sideid'] = '1';
$a->config['piwik']['optout'] = true;
$a->config['piwik']['async'] = false;
The *baseurl* points to your piwik installation. Use the absolute path, The *baseurl* points to your Piwik installation. Use the absolute path,
remember trailing slashes but ignore the protocol (http/s) part of the URL. remember trailing slashes but ignore the protocol (http/s) part of the URL.
Change the *sideid* parameter to whatever ID you want to use for tracking your Change the *sideid* parameter to whatever ID you want to use for tracking your
Friendica installation. The *optout* parameter (true|false) defines whether or Friendica installation. The *optout* parameter (true|false) defines whether or
not a short notice about the utilization of piwik will be displayed on every not a short notice about the utilization of Piwik will be displayed on every
page of your Friendica site (at the bottom of the page with some spacing to the page of your Friendica site (at the bottom of the page with some spacing to the
other content). Part of the note is a link that allows the visitor to set an other content). Part of the note is a link that allows the visitor to set an
_opt-out_ cookie which will prevent visits from that user be tracked by piwik. _opt-out_ cookie which will prevent visits from that user be tracked by piwik.
@ -41,3 +42,5 @@ Currently the optional notice states the following:
that your visits are logged this way you can set a cookie to prevent Piwik that your visits are logged this way you can set a cookie to prevent Piwik
from tracking further visits of the site (opt-out). from tracking further visits of the site (opt-out).
The *async* parameter (true|false) defines whether or not to use asynchronous
tracking so pages load (or appear to load) faster.

View file

@ -1,4 +1,5 @@
{{ inc field_input.tpl with $field=$baseurl }}{{ endinc }} {{ inc field_input.tpl with $field=$baseurl }}{{ endinc }}
{{ inc field_input.tpl with $field=$siteid }}{{ endinc }} {{ inc field_input.tpl with $field=$siteid }}{{ endinc }}
{{ inc field_checkbox.tpl with $field=$optout }}{{ endinc }} {{ inc field_checkbox.tpl with $field=$optout }}{{ endinc }}
{{ inc field_checkbox.tpl with $field=$async }}{{ endinc }}
<div class="submit"><input type="submit" name="page_site" value="$submit" /></div> <div class="submit"><input type="submit" name="page_site" value="$submit" /></div>

View file

@ -2,24 +2,25 @@
/** /**
* Name: Piwik Analytics * Name: Piwik Analytics
* Description: Piwik Analytics Plugin for Friendica * Description: Piwik Analytics Plugin for Friendica
* Version: 1.0 * Version: 1.1
* Author: Tobias Diekershoff <https://diekershoff.homeunix.net/friendika/profile/tobias> * Author: Tobias Diekershoff <https://diekershoff.homeunix.net/friendika/profile/tobias>
* Author: Klaus Weidenbach
*/ */
/* Piwik Analytics Plugin for Friendica /* Piwik Analytics Plugin for Friendica
* *
* Author: Tobias Diekershoff * Author: Tobias Diekershoff
* tobias.diekershoff@gmx.net * tobias.diekershoff@gmx.net
* *
* License: 3-clause BSD license * License: 3-clause BSD license
* *
* Configuration: * Configuration:
* Add the following two lines to your .htconfig.php file: * Add the following lines to your .htconfig.php file:
* *
* $a->config['piwik']['baseurl'] = 'www.example.com/piwik/'; * $a->config['piwik']['baseurl'] = 'www.example.com/piwik/';
* $a->config['piwik']['siteid'] = '1'; * $a->config['piwik']['siteid'] = '1';
* $a->config['piwik']['optout'] = true; // set to false to disable * $a->config['piwik']['optout'] = true; // set to false to disable
* $a->config['piwik']['async'] = false; // set to true to enable
* *
* Change the siteid to the ID that the Piwik tracker for your Friendica * Change the siteid to the ID that the Piwik tracker for your Friendica
* installation has. Alter the baseurl to fit your needs, don't care * installation has. Alter the baseurl to fit your needs, don't care
@ -32,13 +33,13 @@
function piwik_install() { function piwik_install() {
register_hook('page_end', 'addon/piwik/piwik.php', 'piwik_analytics'); register_hook('page_end', 'addon/piwik/piwik.php', 'piwik_analytics');
logger("installed piwik plugin"); logger("installed piwik plugin");
} }
function piwik_uninstall() { function piwik_uninstall() {
unregister_hook('page_end', 'addon/piwik/piwik.php', 'piwik_analytics'); unregister_hook('page_end', 'addon/piwik/piwik.php', 'piwik_analytics');
logger("uninstalled piwik plugin"); logger("uninstalled piwik plugin");
} }
function piwik_analytics($a,&$b) { function piwik_analytics($a,&$b) {
@ -56,40 +57,50 @@ function piwik_analytics($a,&$b) {
$baseurl = get_config('piwik','baseurl'); $baseurl = get_config('piwik','baseurl');
$siteid = get_config('piwik','siteid'); $siteid = get_config('piwik','siteid');
$optout = get_config('piwik','optout'); $optout = get_config('piwik','optout');
$async = get_config('piwik','async');
/* /*
* Add the Piwik code for the site. * Add the Piwik tracking code for the site.
* If async is set to true use asynchronous tracking
*/ */
$b .= "<div id='piwik-code-block'> <!-- Piwik -->\r\n <script type=\"text/javascript\">\r\n var pkBaseURL = ((\"https:\" == document.location.protocol) ? \"https://".$baseurl."\" : \"http://".$baseurl."\");\r\n document.write(unescape(\"%3Cscript src='\" + pkBaseURL + \"piwik.js' type='text/javascript'%3E%3C/script%3E\"));\r\n </script>\r\n<script type=\"text/javascript\">\r\n try {\r\n var piwikTracker = Piwik.getTracker(pkBaseURL + \"piwik.php\", ".$siteid.");\r\n piwikTracker.trackPageView();\r\n piwikTracker.enableLinkTracking();\r\n }\r\n catch( err ) {}\r\n </script>\r\n<noscript><p><img src=\"http://".$baseurl."/piwik.php?idsite=".$siteid."\" style=\"border:0\" alt=\"\" /></p></noscript>\r\n <!-- End Piwik Tracking Tag --> </div>"; if ($async) {
$a->page['htmlhead'] .= "<!-- Piwik --> <script type=\"text/javascript\">\r\nvar _paq = _paq || [];\r\n(function(){ var u=((\"https:\" == document.location.protocol) ? \"https://".$baseurl."\" : \"http://".$baseurl."\");\r\n_paq.push(['setSiteId', ".$siteid."]);\r\n_paq.push(['setTrackerUrl', u+'piwik.php']);\r\n_paq.push(['trackPageView']);\r\n_paq.push(['enableLinkTracking']);\r\nvar d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.type='text/javascript';\r\ng.defer=true; g.async=true; g.src=u+'piwik.js';\r\ns.parentNode.insertBefore(g,s); })();\r\n </script>\r\n<!-- End Piwik Code -->\r\n";
$b .= "<div id='piwik-code-block'> <!-- Piwik -->\r\n<noscript><p><img src=\"http://".$baseurl."piwik.php?idsite=".$siteid."\" style=\"border:0\" alt=\"\" /></p></noscript>\r\n <!-- End Piwik Tracking Tag --> </div>";
} else {
$b .= "<div id='piwik-code-block'> <!-- Piwik -->\r\n <script type=\"text/javascript\">\r\n var pkBaseURL = ((\"https:\" == document.location.protocol) ? \"https://".$baseurl."\" : \"http://".$baseurl."\");\r\n document.write(unescape(\"%3Cscript src='\" + pkBaseURL + \"piwik.js' type='text/javascript'%3E%3C/script%3E\"));\r\n </script>\r\n<script type=\"text/javascript\">\r\n try {\r\n var piwikTracker = Piwik.getTracker(pkBaseURL + \"piwik.php\", ".$siteid.");\r\n piwikTracker.trackPageView();\r\n piwikTracker.enableLinkTracking();\r\n }\r\n catch( err ) {}\r\n </script>\r\n<noscript><p><img src=\"http://".$baseurl."piwik.php?idsite=".$siteid."\" style=\"border:0\" alt=\"\" /></p></noscript>\r\n <!-- End Piwik Tracking Tag --> </div>";
}
/* /*
* If the optout variable is set to true then display the notice * If the optout variable is set to true then display the notice
* otherwise just include the above code into the page. * otherwise just include the above code into the page.
*/ */
if ($optout) { if ($optout) {
$b .= "<div id='piwik-optout-link'>"; $b .= "<div id='piwik-optout-link'>";
$b .= t("This website is tracked using the <a href='http://www.piwik.org'>Piwik</a> analytics tool."); $b .= t("This website is tracked using the <a href='http://www.piwik.org'>Piwik</a> analytics tool.");
$b .= " "; $b .= " ";
$the_url = "http://".$baseurl ."index.php?module=CoreAdminHome&action=optOut"; $the_url = "http://".$baseurl ."index.php?module=CoreAdminHome&action=optOut";
$b .= sprintf(t("If you do not want that your visits are logged this way you <a href='%s'>can set a cookie to prevent Piwik from tracking further visits of the site</a> (opt-out)."), $the_url); $b .= sprintf(t("If you do not want that your visits are logged this way you <a href='%s'>can set a cookie to prevent Piwik from tracking further visits of the site</a> (opt-out)."), $the_url);
$b .= "</div>"; $b .= "</div>";
} }
} }
function piwik_plugin_admin (&$a, &$o) { function piwik_plugin_admin (&$a, &$o) {
$t = file_get_contents( dirname(__file__)."/admin.tpl"); $t = file_get_contents( dirname(__file__)."/admin.tpl");
$o = replace_macros( $t, array( $o = replace_macros( $t, array(
'$submit' => t('Submit'), '$submit' => t('Submit'),
'$baseurl' => array('baseurl', t('Piwik Base URL'), get_config('piwik','baseurl' ), ''), '$baseurl' => array('baseurl', t('Piwik Base URL'), get_config('piwik','baseurl' ), t('Absolute path to your Piwik installation. (without protocol (http/s), with trailing slash)')),
'$siteid' => array('siteid', t('Site ID'), get_config('piwik','siteid' ), ''), '$siteid' => array('siteid', t('Site ID'), get_config('piwik','siteid' ), ''),
'$optout' => array('optout', t('Show opt-out cookie link?'), get_config('piwik','optout' ), ''), '$optout' => array('optout', t('Show opt-out cookie link?'), get_config('piwik','optout' ), ''),
)); '$async' => array('async', t('Asynchronous tracking'), get_config('piwik','async' ), ''),
));
} }
function piwik_plugin_admin_post (&$a) { function piwik_plugin_admin_post (&$a) {
$url = ((x($_POST, 'baseurl')) ? notags(trim($_POST['baseurl'])) : ''); $url = ((x($_POST, 'baseurl')) ? notags(trim($_POST['baseurl'])) : '');
$id = ((x($_POST, 'siteid')) ? trim($_POST['siteid']) : ''); $id = ((x($_POST, 'siteid')) ? trim($_POST['siteid']) : '');
$optout = ((x($_POST, 'optout')) ? trim($_POST['optout']) : ''); $optout = ((x($_POST, 'optout')) ? trim($_POST['optout']) : '');
set_config('piwik', 'baseurl', $url); $async = ((x($_POST, 'async')) ? trim($_POST['async']) : '');
set_config('piwik', 'siteid', $id); set_config('piwik', 'baseurl', $url);
set_config('piwik', 'optout', $optout); set_config('piwik', 'siteid', $id);
info( t('Settings updated.'). EOL); set_config('piwik', 'optout', $optout);
set_config('piwik', 'async', $async);
info( t('Settings updated.'). EOL);
} }