Skip to content

Commit 090bd45

Browse files
committed
Use Google Consent Manager for Analytics
1 parent 8c82a30 commit 090bd45

2 files changed

Lines changed: 49 additions & 12 deletions

File tree

styles/all/template/event/overall_header_stylesheets_after.html

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,44 @@
11
{% if GOOGLEANALYTICS_ID %}
2+
{% if S_CONSENTMANAGER_ANALYTICS_ENABLED %}
3+
<script>
4+
window.dataLayer = window.dataLayer || [];
5+
function gtag(){dataLayer.push(arguments);}
6+
7+
gtag('consent', 'default', {
8+
'analytics_storage': 'denied'
9+
});
10+
11+
(function(window) {
12+
function updateConsent() {
13+
gtag('consent', 'update', {
14+
'analytics_storage': window.consentManager && typeof window.consentManager.hasConsent === 'function' && window.consentManager.hasConsent('analytics') ? 'granted' : 'denied'
15+
});
16+
}
17+
18+
if (window.consentManager && typeof window.consentManager.onChange === 'function')
19+
{
20+
window.consentManager.onChange(updateConsent);
21+
}
22+
else
23+
{
24+
updateConsent();
25+
}
26+
})(window);
27+
</script>
28+
{% endif %}
229
<!-- Google tag (gtag.js) - Google Analytics -->
3-
<script{% if S_CONSENTMANAGER_ANALYTICS_ENABLED %} type="text/plain" data-consent-category="analytics"{% endif %} async src="https://www.googletagmanager.com/gtag/js?id={{ GOOGLEANALYTICS_ID }}"></script>
4-
<script{% if S_CONSENTMANAGER_ANALYTICS_ENABLED %} type="text/plain" data-consent-category="analytics"{% endif %}>
30+
<script async src="https://www.googletagmanager.com/gtag/js?id={{ GOOGLEANALYTICS_ID }}"></script>
31+
<script>
532
window.dataLayer = window.dataLayer || [];
633
function gtag(){dataLayer.push(arguments);}
34+
{% if S_CONSENTMANAGER_ANALYTICS_ENABLED %}
35+
if (window.consentManager && typeof window.consentManager.hasConsent === 'function')
36+
{
37+
gtag('consent', 'update', {
38+
'analytics_storage': window.consentManager.hasConsent('analytics') ? 'granted' : 'denied'
39+
});
40+
}
41+
{% endif %}
742
gtag('js', new Date());
843

944
gtag('config', '{{ GOOGLEANALYTICS_ID }}', {

tests/functional/google_analytics_consentmanager_test.php

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ protected static function setup_extensions()
3030
return $extensions;
3131
}
3232

33-
public function test_consentmanager_defers_google_analytics_scripts()
33+
public function test_consentmanager_enables_google_consent_mode()
3434
{
3535
if (!self::is_consentmanager_available())
3636
{
@@ -53,12 +53,17 @@ public function test_consentmanager_defers_google_analytics_scripts()
5353

5454
self::assertSame(
5555
'https://www.googletagmanager.com/gtag/js?id=' . $this->sample_ga_code,
56-
$crawler->filter('head > script[type="text/plain"][data-consent-category="analytics"][src*="googletagmanager.com/gtag/js"]')->attr('src')
57-
);
58-
self::assertGreaterThan(
59-
0,
60-
$crawler->filter('head > script[type="text/plain"][data-consent-category="analytics"]')->count()
56+
$crawler->filter('head > script[src*="googletagmanager.com/gtag/js"]')->attr('src')
6157
);
58+
59+
$head = $crawler->filter('head')->html();
60+
self::assertStringContainsString("gtag('consent', 'default'", $head);
61+
self::assertStringContainsString("'analytics_storage': 'denied'", $head);
62+
self::assertStringContainsString("window.consentManager.onChange(updateConsent)", $head);
63+
self::assertStringContainsString("window.consentManager.hasConsent('analytics') ? 'granted' : 'denied'", $head);
64+
self::assertStringNotContainsString("'ad_storage'", $head);
65+
self::assertStringNotContainsString("'ad_user_data'", $head);
66+
self::assertStringNotContainsString("'ad_personalization'", $head);
6267
}
6368

6469
public function test_google_analytics_runs_normally_when_analytics_category_is_disabled()
@@ -94,10 +99,7 @@ public function test_google_analytics_runs_normally_when_analytics_category_is_d
9499
'https://www.googletagmanager.com/gtag/js?id=' . $this->sample_ga_code,
95100
$crawler->filter('head > script[src*="googletagmanager.com/gtag/js"]')->attr('src')
96101
);
97-
self::assertSame(
98-
0,
99-
$crawler->filter('head > script[type="text/plain"][data-consent-category="analytics"]')->count()
100-
);
102+
self::assertStringNotContainsString("gtag('consent', 'default'", $crawler->filter('head')->html());
101103
}
102104

103105
protected static function is_consentmanager_available()

0 commit comments

Comments
 (0)