diff --git a/module/CLI/src/Command/Visit/AbstractVisitsListCommand.php b/module/CLI/src/Command/Visit/AbstractVisitsListCommand.php
index bd20a4ae..a999760e 100644
--- a/module/CLI/src/Command/Visit/AbstractVisitsListCommand.php
+++ b/module/CLI/src/Command/Visit/AbstractVisitsListCommand.php
@@ -55,8 +55,8 @@ abstract class AbstractVisitsListCommand extends Command
$rowData = [
...$visit->jsonSerialize(),
- 'country' => $visit->getVisitLocation()?->getCountryName() ?? 'Unknown',
- 'city' => $visit->getVisitLocation()?->getCityName() ?? 'Unknown',
+ 'country' => $visit->getVisitLocation()?->countryName ?? 'Unknown',
+ 'city' => $visit->getVisitLocation()?->cityName ?? 'Unknown',
...$extraFields,
];
diff --git a/module/CLI/src/Command/Visit/LocateVisitsCommand.php b/module/CLI/src/Command/Visit/LocateVisitsCommand.php
index 09e53556..9d8d6674 100644
--- a/module/CLI/src/Command/Visit/LocateVisitsCommand.php
+++ b/module/CLI/src/Command/Visit/LocateVisitsCommand.php
@@ -154,8 +154,8 @@ class LocateVisitsCommand extends AbstractLockedCommand implements VisitGeolocat
public function onVisitLocated(VisitLocation $visitLocation, Visit $visit): void
{
- if (! $visitLocation->isEmpty()) {
- $this->io->writeln(sprintf(' [Address located in "%s"]', $visitLocation->getCountryName()));
+ if (! $visitLocation->isEmpty) {
+ $this->io->writeln(sprintf(' [Address located in "%s"]', $visitLocation->countryName));
} elseif ($visit->hasRemoteAddr() && $visit->getRemoteAddr() !== IpAddress::LOCALHOST) {
$this->io->writeln(' [Could not locate address]');
}
diff --git a/module/Core/src/EventDispatcher/Matomo/SendVisitToMatomo.php b/module/Core/src/EventDispatcher/Matomo/SendVisitToMatomo.php
index ad9660cb..ae1514e4 100644
--- a/module/Core/src/EventDispatcher/Matomo/SendVisitToMatomo.php
+++ b/module/Core/src/EventDispatcher/Matomo/SendVisitToMatomo.php
@@ -53,10 +53,10 @@ class SendVisitToMatomo
$location = $visit->getVisitLocation();
if ($location !== null) {
$tracker
- ->setCity($location->getCityName())
- ->setCountry($location->getCountryName())
- ->setLatitude($location->getLatitude())
- ->setLongitude($location->getLongitude());
+ ->setCity($location->cityName)
+ ->setCountry($location->countryName)
+ ->setLatitude($location->latitude)
+ ->setLongitude($location->longitude);
}
// Set not obfuscated IP if possible, as matomo handles obfuscation itself
diff --git a/module/Core/src/Visit/Entity/VisitLocation.php b/module/Core/src/Visit/Entity/VisitLocation.php
index 2b3b854e..1f1db686 100644
--- a/module/Core/src/Visit/Entity/VisitLocation.php
+++ b/module/Core/src/Visit/Entity/VisitLocation.php
@@ -11,89 +11,54 @@ use Shlinkio\Shlink\IpGeolocation\Model\Location;
class VisitLocation extends AbstractEntity implements JsonSerializable
{
- private string $countryCode;
- private string $countryName;
- private string $regionName;
- private string $cityName;
- private float $latitude;
- private float $longitude;
- private string $timezone;
- private bool $isEmpty;
+ public readonly bool $isEmpty;
- private function __construct()
- {
+ private function __construct(
+ public readonly string $countryCode,
+ public readonly string $countryName,
+ public readonly string $regionName,
+ public readonly string $cityName,
+ public readonly float $latitude,
+ public readonly float $longitude,
+ public readonly string $timezone,
+ ) {
+ $this->isEmpty = (
+ $countryCode === '' &&
+ $countryName === '' &&
+ $regionName === '' &&
+ $cityName === '' &&
+ $latitude === 0.0 &&
+ $longitude === 0.0 &&
+ $timezone === ''
+ );
}
public static function fromGeolocation(Location $location): self
{
- $instance = new self();
-
- $instance->countryCode = $location->countryCode;
- $instance->countryName = $location->countryName;
- $instance->regionName = $location->regionName;
- $instance->cityName = $location->city;
- $instance->latitude = $location->latitude;
- $instance->longitude = $location->longitude;
- $instance->timezone = $location->timeZone;
- $instance->computeIsEmpty();
-
- return $instance;
+ return new self(
+ countryCode: $location->countryCode,
+ countryName: $location->countryName,
+ regionName: $location->regionName,
+ cityName: $location->city,
+ latitude: $location->latitude,
+ longitude: $location->longitude,
+ timezone: $location->timeZone,
+ );
}
public static function fromImport(ImportedShlinkVisitLocation $location): self
{
- $instance = new self();
-
- $instance->countryCode = $location->countryCode;
- $instance->countryName = $location->countryName;
- $instance->regionName = $location->regionName;
- $instance->cityName = $location->cityName;
- $instance->latitude = $location->latitude;
- $instance->longitude = $location->longitude;
- $instance->timezone = $location->timezone;
- $instance->computeIsEmpty();
-
- return $instance;
- }
-
- private function computeIsEmpty(): void
- {
- $this->isEmpty = (
- $this->countryCode === '' &&
- $this->countryName === '' &&
- $this->regionName === '' &&
- $this->cityName === '' &&
- $this->latitude === 0.0 &&
- $this->longitude === 0.0 &&
- $this->timezone === ''
+ return new self(
+ countryCode: $location->countryCode,
+ countryName: $location->countryName,
+ regionName: $location->regionName,
+ cityName: $location->cityName,
+ latitude: $location->latitude,
+ longitude: $location->longitude,
+ timezone: $location->timezone,
);
}
- public function getCountryName(): string
- {
- return $this->countryName;
- }
-
- public function getLatitude(): float
- {
- return $this->latitude;
- }
-
- public function getLongitude(): float
- {
- return $this->longitude;
- }
-
- public function getCityName(): string
- {
- return $this->cityName;
- }
-
- public function isEmpty(): bool
- {
- return $this->isEmpty;
- }
-
public function jsonSerialize(): array
{
return [
diff --git a/module/Core/test/Visit/Entity/VisitLocationTest.php b/module/Core/test/Visit/Entity/VisitLocationTest.php
index 46400f70..5f5c458d 100644
--- a/module/Core/test/Visit/Entity/VisitLocationTest.php
+++ b/module/Core/test/Visit/Entity/VisitLocationTest.php
@@ -18,7 +18,7 @@ class VisitLocationTest extends TestCase
$payload = new Location(...$args);
$location = VisitLocation::fromGeolocation($payload);
- self::assertEquals($isEmpty, $location->isEmpty());
+ self::assertEquals($isEmpty, $location->isEmpty);
}
public static function provideArgs(): iterable