From 278523b54fe01a18d0cba3c9a433d6d9b98661b7 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 27 Nov 2023 16:12:32 +0100 Subject: [PATCH 1/6] Extract helper method for resolving sitemap links --- .../Framework/Features/XmlGenerators/SitemapGenerator.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/framework/src/Framework/Features/XmlGenerators/SitemapGenerator.php b/packages/framework/src/Framework/Features/XmlGenerators/SitemapGenerator.php index 64b5690c2c0..c5a6e4ed587 100644 --- a/packages/framework/src/Framework/Features/XmlGenerators/SitemapGenerator.php +++ b/packages/framework/src/Framework/Features/XmlGenerators/SitemapGenerator.php @@ -57,7 +57,7 @@ protected function addRoute(Route $route): void { $urlItem = $this->xmlElement->addChild('url'); - $this->addChild($urlItem, 'loc', Hyde::url($route->getOutputPath())); + $this->addChild($urlItem, 'loc', $this->resolveRouteLink($route)); $this->addChild($urlItem, 'lastmod', $this->getLastModDate($route->getSourcePath())); $this->addChild($urlItem, 'changefreq', 'daily'); @@ -103,4 +103,9 @@ protected function getFormattedProcessingTime(): string { return (string) $this->getExecutionTimeInMs(); } + + protected function resolveRouteLink(Route $route): string + { + return Hyde::url($route->getOutputPath()); + } } From 1a6ead133b80e0664ade4ecd8a079c1d8f027175 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 27 Nov 2023 16:21:24 +0100 Subject: [PATCH 2/6] Use relative sitemap links when no site URL is set --- .../Features/XmlGenerators/SitemapGenerator.php | 11 ++++++++++- .../tests/Feature/Services/SitemapServiceTest.php | 11 +++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/framework/src/Framework/Features/XmlGenerators/SitemapGenerator.php b/packages/framework/src/Framework/Features/XmlGenerators/SitemapGenerator.php index c5a6e4ed587..81109fb09d3 100644 --- a/packages/framework/src/Framework/Features/XmlGenerators/SitemapGenerator.php +++ b/packages/framework/src/Framework/Features/XmlGenerators/SitemapGenerator.php @@ -17,6 +17,7 @@ use Hyde\Foundation\Facades\Routes; use Hyde\Framework\Concerns\TracksExecutionTime; +use function filled; use function filemtime; use function in_array; use function date; @@ -106,6 +107,14 @@ protected function getFormattedProcessingTime(): string protected function resolveRouteLink(Route $route): string { - return Hyde::url($route->getOutputPath()); + $baseUrl = Config::getNullableString('hyde.url'); + + $canUseQualifiedUrl = filled($baseUrl); + + if ($canUseQualifiedUrl) { + return Hyde::url($route->getOutputPath()); + } + + return $route->getLink(); } } diff --git a/packages/framework/tests/Feature/Services/SitemapServiceTest.php b/packages/framework/tests/Feature/Services/SitemapServiceTest.php index dddc5e42daa..32b36036378 100644 --- a/packages/framework/tests/Feature/Services/SitemapServiceTest.php +++ b/packages/framework/tests/Feature/Services/SitemapServiceTest.php @@ -158,4 +158,15 @@ public function test_all_route_types_are_discovered() copy(Hyde::vendorPath('resources/views/homepages/welcome.blade.php'), Hyde::path('_pages/index.blade.php')); copy(Hyde::vendorPath('resources/views/pages/404.blade.php'), Hyde::path('_pages/404.blade.php')); } + + public function testLinksFallbackToRelativeLinksWhenASiteUrlIsNotSet() + { + config(['hyde.url' => null]); + + $service = new SitemapGenerator(); + $service->generate(); + + $this->assertEquals('404.html', $service->getXmlElement()->url[0]->loc); + $this->assertEquals('index.html', $service->getXmlElement()->url[1]->loc); + } } From e1751446b2ea5b5e71e157007c9d489e266c0451 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 27 Nov 2023 16:24:38 +0100 Subject: [PATCH 3/6] Use relative sitemap links when site URL is for localhost --- .../Features/XmlGenerators/SitemapGenerator.php | 3 ++- .../tests/Feature/Services/SitemapServiceTest.php | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/framework/src/Framework/Features/XmlGenerators/SitemapGenerator.php b/packages/framework/src/Framework/Features/XmlGenerators/SitemapGenerator.php index 81109fb09d3..89e0b2cbc6e 100644 --- a/packages/framework/src/Framework/Features/XmlGenerators/SitemapGenerator.php +++ b/packages/framework/src/Framework/Features/XmlGenerators/SitemapGenerator.php @@ -22,6 +22,7 @@ use function in_array; use function date; use function time; +use function str_starts_with; /** * @see https://www.sitemaps.org/protocol.html @@ -109,7 +110,7 @@ protected function resolveRouteLink(Route $route): string { $baseUrl = Config::getNullableString('hyde.url'); - $canUseQualifiedUrl = filled($baseUrl); + $canUseQualifiedUrl = filled($baseUrl) && ! str_starts_with($baseUrl, 'http://localhost'); if ($canUseQualifiedUrl) { return Hyde::url($route->getOutputPath()); diff --git a/packages/framework/tests/Feature/Services/SitemapServiceTest.php b/packages/framework/tests/Feature/Services/SitemapServiceTest.php index 32b36036378..e82342eb974 100644 --- a/packages/framework/tests/Feature/Services/SitemapServiceTest.php +++ b/packages/framework/tests/Feature/Services/SitemapServiceTest.php @@ -169,4 +169,15 @@ public function testLinksFallbackToRelativeLinksWhenASiteUrlIsNotSet() $this->assertEquals('404.html', $service->getXmlElement()->url[0]->loc); $this->assertEquals('index.html', $service->getXmlElement()->url[1]->loc); } + + public function testLinksFallbackToRelativeLinksWhenSiteUrlIsLocalhost() + { + config(['hyde.url' => 'http://localhost']); + + $service = new SitemapGenerator(); + $service->generate(); + + $this->assertEquals('404.html', $service->getXmlElement()->url[0]->loc); + $this->assertEquals('index.html', $service->getXmlElement()->url[1]->loc); + } } From 1f8c4b250f6e6169448990f406a9d7a6e5287004 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 27 Nov 2023 17:24:56 +0100 Subject: [PATCH 4/6] Cleanup method and document logic reasoning --- .../Features/XmlGenerators/SitemapGenerator.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/framework/src/Framework/Features/XmlGenerators/SitemapGenerator.php b/packages/framework/src/Framework/Features/XmlGenerators/SitemapGenerator.php index 89e0b2cbc6e..0fb0f0e7663 100644 --- a/packages/framework/src/Framework/Features/XmlGenerators/SitemapGenerator.php +++ b/packages/framework/src/Framework/Features/XmlGenerators/SitemapGenerator.php @@ -110,12 +110,13 @@ protected function resolveRouteLink(Route $route): string { $baseUrl = Config::getNullableString('hyde.url'); - $canUseQualifiedUrl = filled($baseUrl) && ! str_starts_with($baseUrl, 'http://localhost'); + if (! filled($baseUrl) || str_starts_with($baseUrl, 'http://localhost')) { + // While the sitemap spec requires a full URL, we rather fall back + // to using relative links instead of using localhost links. - if ($canUseQualifiedUrl) { + return $route->getLink(); + } else { return Hyde::url($route->getOutputPath()); } - - return $route->getLink(); } } From 4a807fdfd5f2e3918c339a2078165e5d2303d152 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 27 Nov 2023 17:25:34 +0100 Subject: [PATCH 5/6] Use blank instead of negated filled for inverted condition --- .../src/Framework/Features/XmlGenerators/SitemapGenerator.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/framework/src/Framework/Features/XmlGenerators/SitemapGenerator.php b/packages/framework/src/Framework/Features/XmlGenerators/SitemapGenerator.php index 0fb0f0e7663..38e53a3aa3b 100644 --- a/packages/framework/src/Framework/Features/XmlGenerators/SitemapGenerator.php +++ b/packages/framework/src/Framework/Features/XmlGenerators/SitemapGenerator.php @@ -17,7 +17,7 @@ use Hyde\Foundation\Facades\Routes; use Hyde\Framework\Concerns\TracksExecutionTime; -use function filled; +use function blank; use function filemtime; use function in_array; use function date; @@ -110,7 +110,7 @@ protected function resolveRouteLink(Route $route): string { $baseUrl = Config::getNullableString('hyde.url'); - if (! filled($baseUrl) || str_starts_with($baseUrl, 'http://localhost')) { + if (blank($baseUrl) || str_starts_with($baseUrl, 'http://localhost')) { // While the sitemap spec requires a full URL, we rather fall back // to using relative links instead of using localhost links. From b79629e3d87ddfd38198e10436bcf381a6bd3c6d Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 27 Nov 2023 17:29:22 +0100 Subject: [PATCH 6/6] Update RELEASE_NOTES.md --- RELEASE_NOTES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 197bada5808..24b384a5e64 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -15,6 +15,7 @@ This serves two purposes: ### Changed - The `docs.sidebar.footer` config option now accepts a Markdown string to replace the default footer in https://github.com/hydephp/develop/pull/1477 +- Links in the `sitemap.xml` file are now relative when a site URL is not set, instead of using the default localhost URL in https://github.com/hydephp/develop/pull/1479 ### Deprecated - for soon-to-be removed features.