diff --git a/CHANGELOG.md b/CHANGELOG.md index f6ec4f684..07d4e3ac8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com), and this Previously, this was exposed only for orphan visits, since this can be an arbitrary value for those. +* [#2077](https://github.com/shlinkio/shlink/issues/2077) When sending visits to Matomo, the short URL title is now used as document title in matomo. + ### Changed * [#2034](https://github.com/shlinkio/shlink/issues/2034) Modernize entities, using constructor property promotion and readonly wherever possible. * [#2036](https://github.com/shlinkio/shlink/issues/2036) Deep performance improvement in some endpoints which involve counting visits: diff --git a/docker-compose.yml b/docker-compose.yml index ccc5fc2d9..5bccfd482 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -169,7 +169,7 @@ services: shlink_matomo: container_name: shlink_matomo - image: matomo:4.15-apache + image: matomo:5.0-apache ports: - "8003:80" volumes: diff --git a/module/Core/src/EventDispatcher/Matomo/SendVisitToMatomo.php b/module/Core/src/EventDispatcher/Matomo/SendVisitToMatomo.php index be288fd0c..d0fa10351 100644 --- a/module/Core/src/EventDispatcher/Matomo/SendVisitToMatomo.php +++ b/module/Core/src/EventDispatcher/Matomo/SendVisitToMatomo.php @@ -13,14 +13,14 @@ use Shlinkio\Shlink\Core\Visit\Entity\Visit; use Throwable; -class SendVisitToMatomo +readonly class SendVisitToMatomo { public function __construct( - private readonly EntityManagerInterface $em, - private readonly LoggerInterface $logger, - private readonly ShortUrlStringifier $shortUrlStringifier, - private readonly MatomoOptions $matomoOptions, - private readonly MatomoTrackerBuilderInterface $trackerBuilder, + private EntityManagerInterface $em, + private LoggerInterface $logger, + private ShortUrlStringifier $shortUrlStringifier, + private MatomoOptions $matomoOptions, + private MatomoTrackerBuilderInterface $trackerBuilder, ) { } @@ -69,8 +69,8 @@ public function __invoke(VisitLocated $visitLocated): void $tracker->setCustomTrackingParameter('orphan', 'true'); } - // Send empty document title to avoid different actions to be created by matomo - $tracker->doTrackPageView(''); + // Send the short URL title or an empty document title to avoid different actions to be created by matomo + $tracker->doTrackPageView($visit->shortUrl?->title() ?? ''); } catch (Throwable $e) { // Capture all exceptions to make sure this does not interfere with the regular execution $this->logger->error('An error occurred while trying to send visit to Matomo. {e}', ['e' => $e]); diff --git a/module/Core/src/ShortUrl/Entity/ShortUrl.php b/module/Core/src/ShortUrl/Entity/ShortUrl.php index ac21b34bf..ed97f9f52 100644 --- a/module/Core/src/ShortUrl/Entity/ShortUrl.php +++ b/module/Core/src/ShortUrl/Entity/ShortUrl.php @@ -192,6 +192,11 @@ public function forwardQuery(): bool return $this->forwardQuery; } + public function title(): ?string + { + return $this->title; + } + public function reachedVisits(int $visitsAmount): bool { return count($this->visits) >= $visitsAmount; diff --git a/module/Core/test/EventDispatcher/Matomo/SendVisitToMatomoTest.php b/module/Core/test/EventDispatcher/Matomo/SendVisitToMatomoTest.php index d821bcbb1..cf9f40050 100644 --- a/module/Core/test/EventDispatcher/Matomo/SendVisitToMatomoTest.php +++ b/module/Core/test/EventDispatcher/Matomo/SendVisitToMatomoTest.php @@ -72,7 +72,7 @@ public function visitIsSentWhenItExists(Visit $visit, ?string $originalIpAddress $tracker->expects($this->once())->method('setUrl')->willReturn($tracker); $tracker->expects($this->once())->method('setUserAgent')->willReturn($tracker); $tracker->expects($this->once())->method('setUrlReferrer')->willReturn($tracker); - $tracker->expects($this->once())->method('doTrackPageView')->with(''); + $tracker->expects($this->once())->method('doTrackPageView')->with($visit->shortUrl?->title() ?? ''); if ($visit->isOrphan()) { $tracker->expects($this->exactly(2))->method('setCustomTrackingParameter')->willReturnMap([