From 9ffddb5ce18a332cc04ffc40d760671699c1025f Mon Sep 17 00:00:00 2001 From: Arthur Suzuki <arthur.suzuki@biblibre.com> Date: Thu, 9 Jun 2022 16:35:16 +0200 Subject: [PATCH] hotline#145461 : Analytics : Exclude ModoBib Users from web analytics --- VERSIONS_HOTLINE/145461 | 3 + library/Class/AdminVar.php | 8 ++- library/Class/Cookies/Base.php | 25 +++++-- library/Class/Cookies/TarteAuCitron.php | 9 ++- tests/scenarios/matomo/MatomoTest.php | 92 +++++++++++++++++++++++++ 5 files changed, 126 insertions(+), 11 deletions(-) create mode 100644 VERSIONS_HOTLINE/145461 diff --git a/VERSIONS_HOTLINE/145461 b/VERSIONS_HOTLINE/145461 new file mode 100644 index 00000000000..70f1c9013ed --- /dev/null +++ b/VERSIONS_HOTLINE/145461 @@ -0,0 +1,3 @@ + - correctif #145461 : Statistiques Matomo et Google Analytics : Vous pouvez exclure + les statistiques d'utilisation du portail des administrateurs + via la variable en décochant la variable "ENABLE_ADMIN_STATS". \ No newline at end of file diff --git a/library/Class/AdminVar.php b/library/Class/AdminVar.php index 9614400cddd..4d33457501b 100644 --- a/library/Class/AdminVar.php +++ b/library/Class/AdminVar.php @@ -470,7 +470,8 @@ Pour vous désabonner de la lettre d\'information, merci de cliquer sur le lien 'GOOGLE_TAG_MANAGER_ID' => Class_AdminVar_Meta::newDefault($this->_('Identifiant Google Tag Manager (sous la forme GTM-XXXXXX')), 'GOOGLE_ANALYTICS_ID' => Class_AdminVar_Meta::newDefault($this->_('Identifiant Google Analytics (sous la forme UA-12345678-1)')), 'GOOGLE_ANALYTICS_MOREJS' => Class_AdminVar_Meta::newDefault($this->_('Javascript additionnel pour google analytics', - ['value'=> '']))]; + ['value'=> ''])), + 'ENABLE_ADMIN_STATS' => Class_AdminVar_Meta::newOnOff($this->_('Activer les statistiques d\'utilisation du portail pour l\'activité des administrateurs'))->enable()]; } @@ -711,6 +712,11 @@ Pour vous désabonner de la lettre d\'information, merci de cliquer sur le lien } + public function areAdminStatsEnabled() : bool { + return Class_AdminVar::isModuleEnabled('ENABLE_ADMIN_STATS'); + } + + /** * @return bool */ diff --git a/library/Class/Cookies/Base.php b/library/Class/Cookies/Base.php index 832b55ca0c2..b1a926be029 100644 --- a/library/Class/Cookies/Base.php +++ b/library/Class/Cookies/Base.php @@ -22,7 +22,8 @@ class Class_Cookies_Base { protected $_activated = [], - $_display_panel = false; + $_display_panel = false, + $_js_stat; public function initScripts() { @@ -69,10 +70,24 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> public function analytics() { - $js_stat = new Class_AdminVar_JsStat(); - if ($js_stat->isGoogleAnalytics() && $id = Class_AdminVar::get('GOOGLE_ANALYTICS_ID')) - return $this->googleAnalytics($id,$js_stat->getGoogleAnalyticsMoreJs()); - return Class_AdminVar::get('JS_STAT'); + if ( ! $this->_isAnalyticsEnabledForCurrentUser()) + return ''; + + $this->_js_stat = new Class_AdminVar_JsStat; + + return($this->_js_stat->isGoogleAnalytics() && $this->_getGoogleAnalyticsId()) + ? $this->googleAnalytics($this->_getGoogleAnalyticsId(),$this->_js_stat->getGoogleAnalyticsMoreJs()) + : Class_AdminVar::get('JS_STAT'); + } + + + protected function _isAnalyticsEnabledForCurrentUser() : bool { + return Class_AdminVar::areAdminStatsEnabled() || ! Class_Users::isCurrentUserCanAccesBackend(); + } + + + protected function _getGoogleAnalyticsId(){ + return Class_AdminVar::get('GOOGLE_ANALYTICS_ID'); } diff --git a/library/Class/Cookies/TarteAuCitron.php b/library/Class/Cookies/TarteAuCitron.php index 448bb733394..40f847b08af 100644 --- a/library/Class/Cookies/TarteAuCitron.php +++ b/library/Class/Cookies/TarteAuCitron.php @@ -59,11 +59,10 @@ class Class_Cookies_TarteAuCitron extends Class_Cookies_Base { } - public function analytics() { - $js_stat = new Class_AdminVar_JsStat(); - if ($js_stat->isGoogleAnalytics()) - return $this->googleAnalytics($js_stat->getTrackerId(), $js_stat->getGoogleAnalyticsMoreJs()); - return Class_AdminVar::get('JS_STAT'); + protected function _getGoogleAnalyticsId() { + return ($this->_js_stat) + ? $this->_js_stat->getTrackerId() + : ''; } diff --git a/tests/scenarios/matomo/MatomoTest.php b/tests/scenarios/matomo/MatomoTest.php index 2bbd61b8aa1..92d9e9457ff 100644 --- a/tests/scenarios/matomo/MatomoTest.php +++ b/tests/scenarios/matomo/MatomoTest.php @@ -261,6 +261,7 @@ class MatomoStatControllerMatomoActionTest extends Admin_AbstractControllerTestC + /** * @see http://forge.afi-sa.fr/issues/52810 */ @@ -458,3 +459,94 @@ _paq.push(['enableLinkTracking']); $this->assertEquals(1, $this->_matomotracker->methodCallCount('setCity')); } } + + + + +abstract class MatomoStatWithUserModoBibModoTestCase extends Admin_AbstractControllerTestCase { + + public function setUp() { + parent::setUp(); + Class_AdminVar::set('JS_STAT','<script>JS_STAT_matomo</script>'); + Class_Users::getIdentity()->beModoBib(); + } +} + + + + +class MatomoStatWithAdminStatsEnabledAndUserModoBibTest extends MatomoStatWithUserModoBibModoTestCase { + + public function setUp() { + parent::setUp(); + Class_AdminVar::set('ENABLE_ADMIN_STATS', '1'); + } + + + /** @test */ + public function whenEnableAdminStatspageShouldContainsJSStatMatomo() { + $this->dispatch('/'); + $this->assertXPathContentContains('//script', 'JS_STAT_matomo'); + } + + + /** @test */ + public function inIntonationTemplatePageShouldContainsJSStatMatomo() { + $this->_buildTemplateProfil(['id' => 2]); + $this->dispatch('/'); + $this->assertXPathContentContains('//script', 'JS_STAT_matomo'); + } +} + + + + +class MatomoStatWithAdminStatDisabledAndUserModoBibTest extends MatomoStatWithUserModoBibModoTestCase { + + public function setUp() { + parent::setUp(); + Class_AdminVar::set('ENABLE_ADMIN_STATS', '0'); + } + + + /** @test */ + public function pageShouldNotContainsJSStatMatomo() { + $this->dispatch('/'); + $this->assertNotXPathContentContains('//script', 'JS_STAT_matomo'); + } + + + /** @test */ + public function whenEnableAdminStatsInIntonationpageShouldContainsJSStatMatomo() { + $this->_buildTemplateProfil(['id' => 2]); + $this->dispatch('/'); + $this->assertNotXPathContentContains('//script', 'JS_STAT_matomo'); + } +} + + + + +class MatomoStatShouldTrackAbonneSIGBActionTest extends Admin_AbstractControllerTestCase { + + public function setUp() { + parent::setUp(); + Class_AdminVar::set('JS_STAT','<script>JS_STAT_matomo</script>'); + Class_Users::getIdentity()->beAbonneSigb(); + } + + + /** @test */ + public function pageShouldContainsJSStatMatomo() { + $this->dispatch('/'); + $this->assertXPathContentContains('//body/script', 'JS_STAT_matomo'); + } + + + /** @test */ + public function inIntonationTemplatePageShouldContainsJSStatMatomo() { + $this->_buildTemplateProfil(['id' => 2]); + $this->dispatch('/'); + $this->assertXPathContentContains('//body/script', 'JS_STAT_matomo'); + } +} \ No newline at end of file -- GitLab