2011-09-25 08:56:03 +00:00
< ? php
/**
2019-02-19 06:21:05 +00:00
* Name : Matomo / Piwik Analytics
* Description : Matomo / Piwik Analytics Addon for Friendica
2016-07-28 14:32:05 +00:00
* Version : 1.3
2013-06-14 17:40:10 +00:00
* Author : Tobias Diekershoff < https :// f . diekershoff . de / profile / tobias >
2012-02-19 09:17:38 +00:00
* Author : Klaus Weidenbach
2011-09-25 08:56:03 +00:00
*/
2018-01-20 13:57:41 +00:00
/* Piwik Analytics Addon for Friendica
2011-09-25 08:56:03 +00:00
*
* Author : Tobias Diekershoff
* tobias . diekershoff @ gmx . net
*
2012-02-19 09:17:38 +00:00
* License : 3 - clause BSD license
2011-09-25 08:56:03 +00:00
*
* Configuration :
2014-08-11 07:07:25 +00:00
* Use the administration panel to configure the Piwik tracking addon , or
2022-11-20 16:43:42 +00:00
* in case you don ' t use this , add the following lines to your config / piwik . config . php
2014-08-11 07:07:25 +00:00
* file :
2011-09-25 08:56:03 +00:00
*
2022-11-20 16:43:42 +00:00
* return [
* 'piwik' => [
* 'baseurl' => '' ,
* 'sideid' => '' ,
* 'optout' => true ,
* 'async' => false ,
2023-04-30 08:27:23 +00:00
* 'shortendpoint' => false ,
2022-11-20 16:43:42 +00:00
* ],
* ];
2011-09-25 08:56:03 +00:00
*
2012-01-31 11:08:46 +00:00
* Change the siteid to the ID that the Piwik tracker for your Friendica
2011-09-25 08:56:03 +00:00
* installation has . Alter the baseurl to fit your needs , don ' t care
* about http / https but beware to put the trailing / at the end of your
* setting .
*/
2019-02-03 21:22:03 +00:00
2018-12-26 07:28:16 +00:00
use Friendica\Core\Hook ;
2018-10-29 23:40:18 +00:00
use Friendica\Core\Logger ;
2018-10-31 14:55:15 +00:00
use Friendica\Core\Renderer ;
2019-12-30 02:55:10 +00:00
use Friendica\DI ;
2023-01-01 19:21:56 +00:00
use Friendica\Core\Config\Util\ConfigFileManager ;
2017-11-06 23:55:24 +00:00
2011-09-25 08:56:03 +00:00
function piwik_install () {
2018-12-26 07:28:16 +00:00
Hook :: register ( 'load_config' , 'addon/piwik/piwik.php' , 'piwik_load_config' );
Hook :: register ( 'page_end' , 'addon/piwik/piwik.php' , 'piwik_analytics' );
2011-09-25 08:56:03 +00:00
2021-10-21 06:04:27 +00:00
Logger :: notice ( " installed piwik addon " );
2011-09-25 08:56:03 +00:00
}
2023-01-14 02:16:09 +00:00
function piwik_load_config ( ConfigFileManager $loader )
2018-06-28 03:18:33 +00:00
{
2023-01-14 02:16:09 +00:00
DI :: app () -> getConfigCache () -> load ( $loader -> loadAddonConfig ( 'piwik' ), \Friendica\Core\Config\ValueObject\Cache :: SOURCE_STATIC );
2018-06-28 03:18:33 +00:00
}
2023-01-14 02:16:09 +00:00
function piwik_analytics ( string & $b )
2022-06-23 05:16:22 +00:00
{
2011-09-25 08:56:03 +00:00
/*
2018-01-20 13:57:41 +00:00
* styling of every HTML block added by this addon is done in the
2012-01-31 11:08:46 +00:00
* associated CSS file . We just have to tell Friendica to get it
2011-09-25 08:56:03 +00:00
* into the page header .
*/
2023-04-30 08:27:23 +00:00
DI :: page () -> registerStylesheet ( 'addon/piwik/piwik.css' , 'all' );
2011-09-25 08:56:03 +00:00
/*
2022-11-20 16:43:42 +00:00
* Get the configuration values .
2011-09-25 08:56:03 +00:00
*/
2020-01-19 20:21:12 +00:00
$baseurl = DI :: config () -> get ( 'piwik' , 'baseurl' );
$siteid = DI :: config () -> get ( 'piwik' , 'siteid' );
$optout = DI :: config () -> get ( 'piwik' , 'optout' );
$async = DI :: config () -> get ( 'piwik' , 'async' );
2023-04-30 08:27:23 +00:00
$shortendpoint = DI :: config () -> get ( 'piwik' , 'shortendpoint' );
2011-09-25 08:56:03 +00:00
/*
2012-02-19 09:17:38 +00:00
* Add the Piwik tracking code for the site .
* If async is set to true use asynchronous tracking
2011-09-25 08:56:03 +00:00
*/
2024-12-11 21:42:48 +00:00
2023-04-30 08:27:23 +00:00
$scriptAsyncValue = $async ? 'true' : 'false' ;
$scriptPhpEndpoint = $shortendpoint ? 'js/' : 'piwik.php' ;
$scriptJsEndpoint = $shortendpoint ? 'js/' : 'piwik.js' ;
$b .= " <!-- Piwik --> <script type= \" text/javascript \" > var _paq = _paq || []; _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function() { var u=(( \" https: \" == document.location.protocol) ? \" https \" : \" http \" ) + \" :// $baseurl\ " ; _paq . push ([ 'setTrackerUrl' , u + '$scriptPhpEndpoint' ]); _paq . push ([ 'setSiteId' , $siteid ]); var d = document , g = d . createElement ( 'script' ), s = d . getElementsByTagName ( 'script' )[ 0 ]; g . type = 'text/javascript' ; g . defer = true ; g . async = $scriptAsyncValue ; g . src = u + '$scriptJsEndpoint' ; s . parentNode . insertBefore ( g , s ); })(); </ script > <!-- End Piwik Code --> \r\n " ;
2012-02-19 09:17:38 +00:00
if ( $async ) {
2023-04-30 08:27:23 +00:00
$b .= " <div id='piwik-code-block'> <!-- Piwik --> \r \n <noscript><p><img src= \" // $baseurl $scriptPhpEndpoint ?idsite= $siteid\ " style = \ " border:0 \" alt= \" \" /></p></noscript> \r \n <!-- End Piwik Tracking Tag --> </div> " ;
2012-02-19 09:17:38 +00:00
}
2011-09-25 08:56:03 +00:00
/*
* If the optout variable is set to true then display the notice
* otherwise just include the above code into the page .
*/
if ( $optout ) {
2012-02-19 09:17:38 +00:00
$b .= " <div id='piwik-optout-link'> " ;
2020-01-18 19:52:33 +00:00
$b .= DI :: l10n () -> t ( " This website is tracked using the <a href='http://www.matomo.org'>Matomo</a> analytics tool. " );
2012-02-19 09:17:38 +00:00
$b .= " " ;
2023-04-30 08:27:23 +00:00
$the_url = " http:// { $baseurl } index.php?module=CoreAdminHome&action=optOut " ;
2020-01-18 19:52:33 +00:00
$b .= DI :: l10n () -> t ( " If you do not want that your visits are logged in this way you <a href='%s'>can set a cookie to prevent Matomo / Piwik from tracking further visits of the site</a> (opt-out). " , $the_url );
2012-02-19 09:17:38 +00:00
$b .= " </div> " ;
2011-09-25 08:56:03 +00:00
}
}
2023-01-14 02:16:09 +00:00
function piwik_addon_admin ( string & $o )
2022-06-30 11:32:13 +00:00
{
2018-10-31 14:55:15 +00:00
$t = Renderer :: getMarkupTemplate ( " admin.tpl " , " addon/piwik/ " );
2022-06-30 11:32:13 +00:00
2018-10-31 14:55:15 +00:00
$o = Renderer :: replaceMacros ( $t , [
2020-01-18 19:52:33 +00:00
'$submit' => DI :: l10n () -> t ( 'Save Settings' ),
2020-01-19 20:21:12 +00:00
'$piwikbaseurl' => [ 'baseurl' , DI :: l10n () -> t ( 'Matomo (Piwik) Base URL' ), DI :: config () -> get ( 'piwik' , 'baseurl' ), DI :: l10n () -> t ( 'Absolute path to your Matomo (Piwik) installation. (without protocol (http/s), with trailing slash)' )],
'$siteid' => [ 'siteid' , DI :: l10n () -> t ( 'Site ID' ), DI :: config () -> get ( 'piwik' , 'siteid' ), '' ],
'$optout' => [ 'optout' , DI :: l10n () -> t ( 'Show opt-out cookie link?' ), DI :: config () -> get ( 'piwik' , 'optout' ), '' ],
'$async' => [ 'async' , DI :: l10n () -> t ( 'Asynchronous tracking' ), DI :: config () -> get ( 'piwik' , 'async' ), '' ],
2023-04-30 08:27:23 +00:00
'$shortendpoint' => [ 'shortendpoint' , DI :: l10n () -> t ( " Shortcut path to the script ('/js/' instead of '/piwik.js') " ), DI :: config () -> get ( 'piwik' , 'shortendpoint' ), '' ],
2018-01-15 13:15:33 +00:00
]);
2011-09-25 08:56:03 +00:00
}
2022-06-30 11:32:13 +00:00
2023-01-14 02:16:09 +00:00
function piwik_addon_admin_post ()
2022-06-30 11:32:13 +00:00
{
DI :: config () -> set ( 'piwik' , 'baseurl' , trim ( $_POST [ 'baseurl' ] ? ? '' ));
DI :: config () -> set ( 'piwik' , 'siteid' , trim ( $_POST [ 'siteid' ] ? ? '' ));
DI :: config () -> set ( 'piwik' , 'optout' , trim ( $_POST [ 'optout' ] ? ? '' ));
DI :: config () -> set ( 'piwik' , 'async' , trim ( $_POST [ 'async' ] ? ? '' ));
2023-04-30 08:27:23 +00:00
DI :: config () -> set ( 'piwik' , 'shortendpoint' , trim ( $_POST [ 'shortendpoint' ] ? ? '' ));
2011-09-25 08:56:03 +00:00
}