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