aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--plugins/piwik/piwik.meta4
-rw-r--r--plugins/piwik/piwik.php71
2 files changed, 75 insertions, 0 deletions
diff --git a/plugins/piwik/piwik.meta b/plugins/piwik/piwik.meta
new file mode 100644
index 00000000..20b9628e
--- /dev/null
+++ b/plugins/piwik/piwik.meta
@@ -0,0 +1,4 @@
1description="A plugin that adds Piwik tracking code to Shaarli pages."
2parameters="PIWIK_URL;PIWIK_SITEID"
3parameter.PIWIK_URL="Piwik URL"
4parameter.PIWIK_SITEID="Piwik site ID"
diff --git a/plugins/piwik/piwik.php b/plugins/piwik/piwik.php
new file mode 100644
index 00000000..7c44909c
--- /dev/null
+++ b/plugins/piwik/piwik.php
@@ -0,0 +1,71 @@
1<?php
2/**
3 * Piwik plugin.
4 * Adds tracking code on each page.
5 */
6
7/**
8 * Initialization function.
9 * It will be called when the plugin is loaded.
10 * This function can be used to return a list of initialization errors.
11 *
12 * @param $conf ConfigManager instance.
13 *
14 * @return array List of errors (optional).
15 */
16function piwik_init($conf)
17{
18 $piwikUrl = $conf->get('plugins.PIWIK_URL');
19 $piwikSiteid = $conf->get('plugins.PIWIK_SITEID');
20 if (empty($piwikUrl) || empty($piwikSiteid)) {
21 $error = 'Piwik plugin error: ' .
22 'Please define PIWIK_URL and PIWIK_SITEID in the plugin administration page.';
23 return array($error);
24 }
25}
26
27/**
28 * Hook render_footer.
29 * Executed on every page redering.
30 *
31 * Template placeholders:
32 * - text
33 * - endofpage
34 * - js_files
35 *
36 * Data:
37 * - _PAGE_: current page
38 * - _LOGGEDIN_: true/false
39 *
40 * @param array $data data passed to plugin
41 *
42 * @return array altered $data.
43 */
44function hook_piwik_render_footer($data, $conf)
45{
46 $piwikUrl = $conf->get('plugins.PIWIK_URL');
47 $piwikSiteid = $conf->get('plugins.PIWIK_SITEID');
48 if (empty($piwikUrl) || empty($piwikSiteid)) {
49 return $data;
50 }
51
52 // Free elements at the end of the page.
53 $data['endofpage'][] = '<!-- Piwik -->' .
54'<script type="text/javascript">' .
55' var _paq = _paq || [];' .
56' _paq.push([\'trackPageView\']);' .
57' _paq.push([\'enableLinkTracking\']);' .
58' (function() {' .
59' var u="//' . $piwikUrl . '/";' .
60' _paq.push([\'setTrackerUrl\', u+\'piwik.php\']);' .
61' _paq.push([\'setSiteId\', \'' . $piwikSiteid . '\']);' .
62' var d=document, g=d.createElement(\'script\'), s=d.getElementsByTagName(\'script\')[0];' .
63' g.type=\'text/javascript\'; g.async=true; g.defer=true; g.src=u+\'piwik.js\'; s.parentNode.insertBefore(g,s);' .
64' })();' .
65'</script>' .
66'<noscript><p><img src="//' . $piwikUrl . '/piwik.php?idsite=' . $piwikSiteid . '" style="border:0;" alt="" /></p></noscript>' .
67'<!-- End Piwik Code -->';
68
69 return $data;
70}
71