Skip to content

Commit ae74db9

Browse files
committed
Allow PHP 7.4
1 parent 06b22eb commit ae74db9

37 files changed

+194
-110
lines changed

.github/workflows/build.yaml

+4-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ jobs:
1515
strategy:
1616
matrix:
1717
php-version:
18-
- "8.1"
18+
- "7.4"
1919

2020
dependencies:
2121
- "highest"
@@ -53,6 +53,7 @@ jobs:
5353
strategy:
5454
matrix:
5555
php-version:
56+
- "7.4"
5657
- "8.1"
5758
- "8.2"
5859

@@ -90,6 +91,7 @@ jobs:
9091
strategy:
9192
matrix:
9293
php-version:
94+
- "7.4"
9395
- "8.1"
9496
- "8.2"
9597

@@ -123,6 +125,7 @@ jobs:
123125
strategy:
124126
matrix:
125127
php-version:
128+
- "7.4"
126129
- "8.1"
127130
- "8.2"
128131

composer.json

+6-5
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,26 @@
1010
}
1111
],
1212
"require": {
13-
"php": ">=8.1",
13+
"php": ">=7.4",
1414
"ext-json": "*",
15-
"php-http/discovery": "^1.15",
15+
"php-http/discovery": "^1.18",
1616
"psr/http-client": "^1.0",
1717
"psr/http-client-implementation": "^1",
1818
"psr/http-factory": "^1.0",
1919
"psr/http-factory-implementation": "^1",
2020
"psr/http-message": "^1.0",
2121
"psr/log": "^1.1 || ^2.0 || ^3.0",
22+
"symfony/polyfill-php80": "^1.27",
2223
"webmozart/assert": "^1.11"
2324
},
2425
"require-dev": {
2526
"infection/infection": "^0.26",
26-
"kriswallsmith/buzz": "^1.2",
2727
"nyholm/psr7": "^1.5",
2828
"phpspec/prophecy-phpunit": "^2.0",
2929
"phpunit/phpunit": "^9.5",
3030
"psalm/plugin-phpunit": "^0.18",
31-
"setono/code-quality-pack": "^2.4"
31+
"setono/code-quality-pack": "^2.4",
32+
"symfony/http-client": "^5.4 || ^6.0"
3233
},
3334
"prefer-stable": true,
3435
"autoload": {
@@ -46,7 +47,7 @@
4647
"dealerdirect/phpcodesniffer-composer-installer": false,
4748
"ergebnis/composer-normalize": true,
4849
"infection/extension-installer": true,
49-
"php-http/discovery": true
50+
"php-http/discovery": false
5051
},
5152
"sort-packages": true
5253
},

ecs.php

+6-4
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22

33
declare(strict_types=1);
44

5-
use Symplify\EasyCodingStandard\Config\ECSConfig;
5+
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
6+
use Symplify\EasyCodingStandard\ValueObject\Option;
67

7-
return static function (ECSConfig $config): void {
8+
return static function (ContainerConfigurator $config): void {
89
$config->import('vendor/sylius-labs/coding-standard/ecs.php');
9-
$config->paths([
10-
'src', 'tests'
10+
$config->parameters()->set(Option::PATHS, [
11+
'src',
12+
'tests'
1113
]);
1214
};

rector.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
declare(strict_types=1);
44

55
use Rector\Config\RectorConfig;
6+
use Rector\Set\ValueObject\DowngradeLevelSetList;
67
use Rector\Set\ValueObject\LevelSetList;
78

89
return static function (RectorConfig $rectorConfig): void {
@@ -12,6 +13,6 @@
1213
]);
1314

1415
$rectorConfig->sets([
15-
LevelSetList::UP_TO_PHP_81
16+
LevelSetList::UP_TO_PHP_74
1617
]);
1718
};

src/Client/Client.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
namespace Setono\GoogleAnalyticsMeasurementProtocol\Client;
66

77
use Http\Discovery\Psr17FactoryDiscovery;
8-
use Http\Discovery\Psr18ClientDiscovery;
8+
use Http\Discovery\Psr18Client;
99
use Psr\Http\Client\ClientInterface as HttpClientInterface;
1010
use Psr\Http\Message\RequestFactoryInterface;
1111
use Psr\Http\Message\ResponseInterface;
@@ -107,7 +107,7 @@ public function setStreamFactory(?StreamFactoryInterface $streamFactory): void
107107
private function getHttpClient(): HttpClientInterface
108108
{
109109
if (null === $this->httpClient) {
110-
$this->httpClient = Psr18ClientDiscovery::find();
110+
$this->httpClient = new Psr18Client();
111111
}
112112

113113
return $this->httpClient;

src/Request/Body/Body.php

+12-7
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@
99

1010
final class Body
1111
{
12+
/**
13+
* Uniquely identifies a user instance of a web client
14+
*/
15+
private string $clientId;
16+
1217
/**
1318
* Optional. A unique identifier for a user. See https://support.google.com/analytics/answer/9213390 for more information on this identifier
1419
*/
@@ -43,12 +48,9 @@ final class Body
4348
*/
4449
private array $events = [];
4550

46-
private function __construct(
47-
/**
48-
* Uniquely identifies a user instance of a web client
49-
*/
50-
private string $clientId,
51-
) {
51+
private function __construct(string $clientId)
52+
{
53+
$this->clientId = $clientId;
5254
$this->timestamp = (int) (microtime(true) * 1_000_000);
5355
}
5456

@@ -98,7 +100,10 @@ public function getUserProperties(): array
98100
return $this->userProperties;
99101
}
100102

101-
public function setUserProperty(string $property, mixed $value): self
103+
/**
104+
* @param mixed $value
105+
*/
106+
public function setUserProperty(string $property, $value): self
102107
{
103108
// See https://developers.google.com/analytics/devguides/collection/protocol/ga4/user-properties?client_type=gtag#reserved_names
104109
if (in_array($property, ['first_open_time', 'first_visit_time', 'last_deep_link_referrer', 'user_id', 'first_open_after_install'], true)) {

src/Request/Body/Event/AddPaymentInfoEvent.php

+9-5
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,22 @@
55
namespace Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event;
66

77
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Item\Item;
8-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\CreatesEmpty;
9-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\HasCoupon;
10-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\HasCurrency;
11-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\HasItems;
12-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\HasValue;
8+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\CreatesEmpty;
9+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\HasCoupon;
10+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\HasCurrency;
11+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\HasItems;
12+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\HasValue;
1313

1414
class AddPaymentInfoEvent extends Event
1515
{
1616
use CreatesEmpty;
17+
1718
use HasCurrency;
19+
1820
use HasValue;
21+
1922
use HasCoupon;
23+
2024
use HasItems;
2125

2226
protected ?string $paymentType = null;

src/Request/Body/Event/AddShippingInfoEvent.php

+9-5
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,22 @@
55
namespace Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event;
66

77
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Item\Item;
8-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\CreatesEmpty;
9-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\HasCoupon;
10-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\HasCurrency;
11-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\HasItems;
12-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\HasValue;
8+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\CreatesEmpty;
9+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\HasCoupon;
10+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\HasCurrency;
11+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\HasItems;
12+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\HasValue;
1313

1414
class AddShippingInfoEvent extends Event
1515
{
1616
use CreatesEmpty;
17+
1718
use HasCurrency;
19+
1820
use HasValue;
21+
1922
use HasCoupon;
23+
2024
use HasItems;
2125

2226
protected ?string $shippingTier = null;

src/Request/Body/Event/AddToCartEvent.php

+7-4
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,19 @@
55
namespace Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event;
66

77
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Item\Item;
8-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\CreatesEmpty;
9-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\HasCurrency;
10-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\HasItems;
11-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\HasValue;
8+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\CreatesEmpty;
9+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\HasCurrency;
10+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\HasItems;
11+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\HasValue;
1212

1313
class AddToCartEvent extends Event
1414
{
1515
use CreatesEmpty;
16+
1617
use HasCurrency;
18+
1719
use HasItems;
20+
1821
use HasValue;
1922

2023
public function getEventName(): string

src/Request/Body/Event/BeginCheckoutEvent.php

+9-5
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,22 @@
55
namespace Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event;
66

77
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Item\Item;
8-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\CreatesEmpty;
9-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\HasCoupon;
10-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\HasCurrency;
11-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\HasItems;
12-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\HasValue;
8+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\CreatesEmpty;
9+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\HasCoupon;
10+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\HasCurrency;
11+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\HasItems;
12+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\HasValue;
1313

1414
class BeginCheckoutEvent extends Event
1515
{
1616
use CreatesEmpty;
17+
1718
use HasCurrency;
19+
1820
use HasValue;
21+
1922
use HasCoupon;
23+
2024
use HasItems;
2125

2226
public function getEventName(): string

src/Request/Body/Event/Event.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event;
66

7-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\HasSessionId;
7+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\HasSessionId;
88
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Request;
99

1010
// todo add validate method

src/Request/Body/Event/Item/Item.php

+11-6
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,25 @@
44

55
namespace Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Item;
66

7-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\CreatesEmpty;
8-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\HasAffiliation;
9-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\HasCoupon;
10-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\HasCurrency;
11-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\HasListId;
12-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\HasListName;
7+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\CreatesEmpty;
8+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\HasAffiliation;
9+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\HasCoupon;
10+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\HasCurrency;
11+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\HasListId;
12+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\HasListName;
1313

1414
class Item
1515
{
1616
use CreatesEmpty;
17+
1718
use HasAffiliation;
19+
1820
use HasCoupon;
21+
1922
use HasCurrency;
23+
2024
use HasListId;
25+
2126
use HasListName;
2227

2328
protected ?string $id = null;

src/Request/Body/Event/PurchaseEvent.php

+11-6
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,25 @@
55
namespace Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event;
66

77
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Item\Item;
8-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\HasAffiliation;
9-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\HasCoupon;
10-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\HasCurrency;
11-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\HasItems;
12-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\HasTransactionId;
13-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\HasValue;
8+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\HasAffiliation;
9+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\HasCoupon;
10+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\HasCurrency;
11+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\HasItems;
12+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\HasTransactionId;
13+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\HasValue;
1414

1515
class PurchaseEvent extends Event
1616
{
1717
use HasCurrency;
18+
1819
use HasItems;
20+
1921
use HasValue;
22+
2023
use HasCoupon;
24+
2125
use HasTransactionId;
26+
2227
use HasAffiliation;
2328

2429
protected ?float $shipping = null;

src/Request/Body/Event/RemoveFromCartEvent.php

+7-4
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,19 @@
55
namespace Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event;
66

77
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Item\Item;
8-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\CreatesEmpty;
9-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\HasCurrency;
10-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\HasItems;
11-
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait\HasValue;
8+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\CreatesEmpty;
9+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\HasCurrency;
10+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\HasItems;
11+
use Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits\HasValue;
1212

1313
class RemoveFromCartEvent extends Event
1414
{
1515
use CreatesEmpty;
16+
1617
use HasCurrency;
18+
1719
use HasItems;
20+
1821
use HasValue;
1922

2023
public function getEventName(): string

src/Request/Body/Event/Trait/CreatesEmpty.php src/Request/Body/Event/Traits/CreatesEmpty.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
declare(strict_types=1);
44

5-
namespace Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait;
5+
namespace Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits;
66

77
trait CreatesEmpty
88
{

src/Request/Body/Event/Trait/HasAffiliation.php src/Request/Body/Event/Traits/HasAffiliation.php

+5-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
declare(strict_types=1);
44

5-
namespace Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Trait;
5+
namespace Setono\GoogleAnalyticsMeasurementProtocol\Request\Body\Event\Traits;
66

77
trait HasAffiliation
88
{
@@ -13,7 +13,10 @@ public function getAffiliation(): ?string
1313
return $this->affiliation;
1414
}
1515

16-
public function setAffiliation(?string $affiliation): static
16+
/**
17+
* @return static
18+
*/
19+
public function setAffiliation(?string $affiliation): self
1720
{
1821
$this->affiliation = $affiliation;
1922

0 commit comments

Comments
 (0)