From 2e518c9d5e3537b9fcb858510063ff815b7eecf7 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 9 Feb 2009 09:14:44 -0500 Subject: [PATCH] Sample plugin for Google Analytics A common request is to use Google Analytics for Laconica servers. This plugin will add the correct spell to make Google Analytics work. --- plugins/GoogleAnalyticsPlugin.php | 77 +++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 plugins/GoogleAnalyticsPlugin.php diff --git a/plugins/GoogleAnalyticsPlugin.php b/plugins/GoogleAnalyticsPlugin.php new file mode 100644 index 0000000000..87a70e31ea --- /dev/null +++ b/plugins/GoogleAnalyticsPlugin.php @@ -0,0 +1,77 @@ +. + * + * @category Plugin + * @package Laconica + * @author Evan Prodromou + * @copyright 2008 Control Yourself, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + +if (!defined('LACONICA')) { + exit(1); +} + +/** + * Plugin to use Google Analytics + * + * This plugin will spoot out the correct JavaScript spell to invoke Google Analytics on a page. + * + * Note that Google Analytics is not compatible with the Franklin Street Statement; consider using + * Pikiw (http://www.pikiw.org/) instead! + * + * @category Plugin + * @package Laconica + * @author Evan Prodromou + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + * + * @see Event + */ + +class GoogleAnalyticsPlugin extends Plugin +{ + var $code = null; + + function __construct($code=null) + { + $this->code = $code; + parent::__construct(); + } + + function onEndShowScripts($action) + { + $js1 = 'var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");'. + 'document.write(unescape("%3Cscript src=\'" + gaJsHost + "google-analytics.com/ga.js\' type=\'text/javascript\'%3E%3C/script%3E"));'; + $js2 = sprintf('try{'. + 'var pageTracker = _gat._getTracker("%s");'. + 'pageTracker._trackPageview();'. + '} catch(err) {}', + $this->code); + $action->elementStart('script', array('type' => 'text/javascript')); + $action->raw($js1); + $action->elementEnd('script'); + $action->elementStart('script', array('type' => 'text/javascript')); + $action->raw($js2); + $action->elementEnd('script'); + } +}