Skip to content

Commit d39123c

Browse files
authored
Add default event parameters (#41)
~ https://support.google.com/analytics/answer/9234069 Note The following parameters are collected by default with every event, including [custom events](https://support.google.com/analytics/answer/12229021). language page_location page_referrer page_title screen_resolution
2 parents fd9b2fe + 32f7d2d commit d39123c

File tree

5 files changed

+165
-1
lines changed

5 files changed

+165
-1
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
namespace AlexWestergaard\PhpGa4\Facade\Type;
4+
5+
interface DefaultEventParams
6+
{
7+
/** @var language */
8+
public function setLanguage(string $lang);
9+
10+
/** @var page_location */
11+
public function setPageLocation(string $url);
12+
13+
/** @var page_referrer */
14+
public function setPageReferrer(string $url);
15+
16+
/** @var page_title */
17+
public function setPageTitle(string $title);
18+
19+
/** @var screen_resolution */
20+
public function setScreenResolution(string $wxh);
21+
22+
public function toArray(): array;
23+
}

src/Facade/Type/Event.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace AlexWestergaard\PhpGa4\Facade\Type;
44

5-
interface Event extends IO
5+
interface Event extends IO, DefaultEventParams
66
{
77
/** @return array<int,string> */
88
public const RESERVED_NAMES = [

src/Helper/AbstractEvent.php

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,60 @@
33
namespace AlexWestergaard\PhpGa4\Helper;
44

55
use AlexWestergaard\PhpGa4\Facade\Type\Event;
6+
use AlexWestergaard\PhpGa4\Facade\Type\DefaultEventParams;
67
use AlexWestergaard\PhpGa4\Exception\Ga4EventException;
78

89
abstract class AbstractEvent extends AbstractIO implements Event
910
{
11+
protected null|string $language;
12+
protected null|string $page_location;
13+
protected null|string $page_referrer;
14+
protected null|string $page_title;
15+
protected null|string $screen_resolution;
16+
17+
public function setLanguage(string $lang)
18+
{
19+
$this->language = $lang;
20+
return $this;
21+
}
22+
23+
public function setPageLocation(string $url)
24+
{
25+
$this->page_location = $url;
26+
return $this;
27+
}
28+
29+
public function setPageReferrer(string $url)
30+
{
31+
$this->page_referrer = $url;
32+
return $this;
33+
}
34+
35+
public function setPageTitle(string $title)
36+
{
37+
$this->page_title = $title;
38+
return $this;
39+
}
40+
41+
public function setScreenResolution(string $wxh)
42+
{
43+
$this->screen_resolution = $wxh;
44+
return $this;
45+
}
46+
47+
public function setEventPage(DefaultEventParams $page)
48+
{
49+
$args = $page->toArray();
50+
51+
$this->language = $args['language'] ?? null;
52+
$this->page_location = $args['page_location'] ?? null;
53+
$this->page_referrer = $args['page_referrer'] ?? null;
54+
$this->page_title = $args['page_title'] ?? null;
55+
$this->screen_resolution = $args['screen_resolution'] ?? null;
56+
57+
return $this;
58+
}
59+
1060
public function toArray(): array
1161
{
1262
$return = [];
@@ -34,6 +84,21 @@ public function toArray(): array
3484
return $return;
3585
}
3686

87+
public function getAllParams(): array
88+
{
89+
return array_unique(array_merge(
90+
[
91+
'language',
92+
'page_location',
93+
'page_referrer',
94+
'page_title',
95+
'screen_resolution',
96+
],
97+
$this->getParams(),
98+
$this->getRequiredParams()
99+
));
100+
}
101+
37102
public static function new(): static
38103
{
39104
return new static();

src/Helper/DefaultEventParams.php

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<?php
2+
3+
namespace AlexWestergaard\PhpGa4\Helper;
4+
5+
use AlexWestergaard\PhpGa4\Facade\Type\DefaultEventParams as TypeDefaultEventParams;
6+
7+
class DefaultEventParams implements TypeDefaultEventParams
8+
{
9+
public function __construct(
10+
protected null|string $language = null,
11+
protected null|string $page_location = null,
12+
protected null|string $page_referrer = null,
13+
protected null|string $page_title = null,
14+
protected null|string $screen_resolution = null
15+
) {
16+
}
17+
18+
public function setLanguage(string $lang)
19+
{
20+
$this->language = $lang;
21+
return $this;
22+
}
23+
24+
public function setPageLocation(string $url)
25+
{
26+
$this->page_location = $url;
27+
return $this;
28+
}
29+
30+
public function setPageReferrer(string $url)
31+
{
32+
$this->page_referrer = $url;
33+
return $this;
34+
}
35+
36+
public function setPageTitle(string $title)
37+
{
38+
$this->page_title = $title;
39+
return $this;
40+
}
41+
42+
public function setScreenResolution(string $wxh)
43+
{
44+
$this->screen_resolution = $wxh;
45+
return $this;
46+
}
47+
48+
public function toArray(): array
49+
{
50+
return [
51+
'language' => $this->language,
52+
'page_location' => $this->page_location,
53+
'page_referrer' => $this->page_referrer,
54+
'page_title' => $this->page_title,
55+
'screen_resolution' => $this->screen_resolution,
56+
];
57+
}
58+
}

test/Unit/EventTest.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -420,6 +420,12 @@ protected function assertEventFills(AbstractEvent $event)
420420
private function populateEventByFromArray(TypeEvent $event)
421421
{
422422
return $event::fromArray([
423+
'language' => 'en-US',
424+
'page_location' => '/',
425+
'page_referrer' => 'https://example.com/',
426+
'page_title' => 'Home - Site',
427+
'screen_resolution' => '1920x1080',
428+
// ---
423429
'currency' => $this->prefill['currency'],
424430
'value' => 9.99,
425431
'affiliation' => 'affiliation',
@@ -456,6 +462,12 @@ private function populateEventByFromArray(TypeEvent $event)
456462

457463
private function populateEventByArrayable(TypeEvent $event)
458464
{
465+
$event['language'] = 'en-US';
466+
$event['page_location'] = '/';
467+
$event['page_referrer'] = 'https://example.com/';
468+
$event['page_title'] = 'Home - Site';
469+
$event['screen_resolution'] = '1920x1080';
470+
459471
$event['currency'] = $this->prefill['currency'];
460472
$event['value'] = 9.99;
461473
$event['affiliation'] = 'affiliation';
@@ -496,6 +508,12 @@ private function populateEventByMethod(
496508
) {
497509
$params = $event->getAllParams();
498510

511+
$event->setLanguage('en-US');
512+
$event->setPageLocation('/');
513+
$event->setPageReferrer('https://example.com/');
514+
$event->setPageTitle('Home - Site');
515+
$event->setScreenResolution('1920x1080');
516+
499517
if (in_array('currency', $params)) {
500518
$event->setCurrency($this->prefill['currency']);
501519
if (in_array('value', $params)) {

0 commit comments

Comments
 (0)