'http://trac.habariproject.org/habari-extras/browser/plugins/piwik',
'name' => 'Piwik',
'description' => 'Automatically adds Piwik tracking code to the theme footer.',
'license' => 'Apache License 2.0',
'author' => 'Andy C',
'authorurl' => 'http://nbrightside.com/habari/',
'version' => '0.1'
);
}
/**
* Display help text
* @return string The help text
*/
public function help()
{
return '
Piwik is an Open Source Web analytics package.
Piwik is self-hosted software. You need to install and configure Piwik
separately. Piwik needs PHP and a MySQL database to store data on site visits.
This plugin embeds the Piwik (Javascript) tracking code in the theme footer.
To install the plugin, unpack under the \'/user/plugins\' directory in your
Habari installation.
Then activate and configure the plugin from the dashboard (Admin-Plugins).
The configuration options are:
Pwiki site URL: This is the full URL of the Piwik site (e.g. \'http://www.example.com/piwik\') - the trailing slash \'/\' is required.
Piwik site number: Piwik can track multiple Web sites. The site number is displayed in the Piwik-Settings administration screen under the \'Site\' tab in the \'ID\' field.
Tracked logged-in users: Visits by logged in users can optionally be ignored.
Auth Token: Your API "token_auth" to allow retrieval of stats for dashboard modules.
';
}
public function filter_plugin_config($actions, $plugin_id)
{
if ( $this->plugin_id() == $plugin_id ) {
$actions[]= _t('Configure');
}
return $actions;
}
public function action_plugin_ui($plugin_id, $action)
{
if ( $this->plugin_id() == $plugin_id && $action == _t('Configure')){
$form = new FormUI(strtolower(get_class($this)));
$form->append('text', 'siteurl', 'option:piwik__siteurl', _t('Piwik site URL'));
$form->append('text', 'sitenum', 'option:piwik__sitenum', _t('Piwik site number'));
$form->append('checkbox', 'trackloggedin', 'option:piwik__trackloggedin', _t( 'Track logged-in users', 'piwik' ));
$form->append('text', 'auth_token', 'option:piwik__auth_token', _t('Piwik Auth Token'));
$form->append('text', 'outlink', 'option:piwik__outlink_name', _t('Piwik Outlink Var Name'));
$form->append('submit', 'save', 'Save');
$form->on_success( array( $this, 'save_config' ) );
$form->out();
}
}
/**
* Invoked when the before the plugin configurations are saved
*
* @param FormUI $form The configuration form being saved
* @return true
*/
public function save_config( $form )
{
$form->save();
Session::notice('Piwik plugin configuration saved');
return false;
}
public function action_plugin_deactivation( $file )
{
if ( realpath( $file ) == __FILE__ ) {
Options::delete('piwik__siteurl');
Options::delete('piwik__sitenum');
Options::delete('piwik__trackloggedin');
Options::delete('piwik__auth_token');
Options::delete('piwik__outlink_name');
}
}
/**
* Add update beacon support
**/
public function action_update_check()
{
Update::add( 'Piwik', 'xxx', $this->info->version );
}
public function action_plugin_activation($file)
{
if (Plugins::id_from_file($file) != Plugins::id_from_file(__FILE__)) return;
Options::set('piwik__trackloggedin', false);
Options::set('piwik__outlink_name', 'link');
}
public function filter_post_content_out( $content, $post )
{
$outlink_url = sprintf(
"%s/piwik.php?%s='.urlencode('$2').'&idsite=%d",
rtrim(Options::get('piwik__siteurl'), '/'),
Options::get('piwik__outlink_name'),
Options::get('piwik__sitenum')
);
$content = preg_replace( '/href=([\'"])([^\'"]+)([\'"])/e', "stripslashes('href=$1$outlink_url$3')", $content );
return $content;
}
public function theme_footer($theme)
{
$class= strtolower( get_class( $this ) );
$siteurl = Options::get( $class . '__siteurl');
$ssl_siteurl = str_replace("http://", "https://", $siteurl);
$sitenum = Options::get( $class . '__sitenum');
$trackloggedin = Options::get( $class . '__trackloggedin');
if ( URL::get_matched_rule()->entire_match == 'user/login') {
// Login page; don't dipslay
return;
}
if ( User::identify()->loggedin ) {
// Only track the logged in user if we were told to
if ( !($trackloggedin) ) {
return;
}
}
echo <<
EOD;
}
public function filter_dash_modules( $modules )
{
array_push( $modules, 'Piwik Last Visitors', 'Piwik Visit Times' );
Stack::add('admin_stylesheet', array($this->get_url() . '/piwikdash.css', 'screen'), 'piwikdash');
return $modules;
}
public function filter_dash_module_piwik_last_visitors( $module, $module_id, $theme )
{
if ( isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] && $_SERVER['HTTPS'] != 'off' ) {
$siteurl = rtrim(
str_replace( "http://", "https://", Options::get('piwik__siteurl') ),
'/'
);
}
else {
$siteurl = rtrim( Options::get('piwik__siteurl'), '/' );
}
$sitenum = Options::get('piwik__sitenum');
$auth_token = Options::get('piwik__auth_token');
$api_query = http_build_query(array(
'module' => 'VisitsSummary',
'action' => 'getLastVisitsGraph',
'idSite' => $sitenum,
'period' => 'day',
'date' => 'last30',
'viewDataTable' => 'generateDataChartEvolution',
'token_auth' => $auth_token,
), null, '&');
$api_url = urlencode("$siteurl/index.php?" . $api_query);
$module['title']= _t('Piwik Last Visitors', 'piwik');
$module['content']= <<
VISITORS;
return $module;
}
public function filter_dash_module_piwik_visit_times( $module, $module_id, $theme )
{
if ( isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] && $_SERVER['HTTPS'] != 'off' ) {
$siteurl = rtrim(
str_replace( "http://", "https://", Options::get('piwik__siteurl') ),
'/'
);
}
else {
$siteurl = rtrim( Options::get('piwik__siteurl'), '/' );
}
$sitenum = Options::get('piwik__sitenum');
$auth_token = Options::get('piwik__auth_token');
$api_query = http_build_query(array(
'module' => 'VisitTime',
'action' => 'getVisitInformationPerServerTime',
'idSite' => $sitenum,
'period' => 'day',
'date' => 'today',
'viewDataTable' => 'generateDataChartVerticalBar',
'token_auth' => $auth_token,
), null, '&');
$api_url = urlencode("$siteurl/index.php?" . $api_query);
$module['title']= _t('Piwik Visit Times', 'piwik');
$module['content']= <<
TIMES;
return $module;
}
}
?>