Skip to content

Commit e33568b

Browse files
committed
Test for more source variations
1 parent c58a775 commit e33568b

File tree

3 files changed

+48
-38
lines changed

3 files changed

+48
-38
lines changed

src/Eloquent/Redirects/RedirectRepository.php

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use Rias\StatamicRedirect\Contracts\RedirectRepository as RepositoryContract;
77
use Rias\StatamicRedirect\Data\Redirect;
88
use Rias\StatamicRedirect\Enums\MatchTypeEnum;
9+
use Rias\StatamicRedirect\GenerateUrlVariants;
910
use Statamic\Data\DataCollection;
1011
use Statamic\Stache\Stache;
1112

@@ -35,26 +36,14 @@ public function findByUrl(string $siteHandle, string $url): ?Redirect
3536
->where('enabled', true)
3637
->where('site', $siteHandle)
3738
->where(function (RedirectQueryBuilder $query) use ($url) {
38-
$query
39-
->orWhere(function (RedirectQueryBuilder $query) use ($url) {
40-
$query->where('source_md5', md5($url))
41-
->where('source', $url);
42-
})
43-
->orWhere(function (RedirectQueryBuilder $query) use ($url) {
44-
$source = str($url)->start('/');
45-
$query->where('source_md5', md5($source))
46-
->where('source', $source);
47-
})
48-
->orWhere(function (RedirectQueryBuilder $query) use ($url) {
49-
$source = str($url)->finish('/');
50-
$query->where('source_md5', md5($source))
51-
->where('source', $source);
52-
})
53-
->orWhere(function (RedirectQueryBuilder $query) use ($url) {
54-
$source = str($url)->start('/')->finish('/');
55-
$query->where('source_md5', md5($source))
56-
->where('source', $source);
39+
$variants = app(GenerateUrlVariants::class)($url);
40+
41+
foreach ($variants as $variant) {
42+
$query->orWhere(function (RedirectQueryBuilder $query) use ($variant) {
43+
$query->where('source_md5', md5($variant))
44+
->where('source', $variant);
5745
});
46+
}
5847
})
5948
->where('match_type', MatchTypeEnum::EXACT)
6049
->orderBy('order')

src/GenerateUrlVariants.php

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
namespace Rias\StatamicRedirect;
4+
5+
class GenerateUrlVariants
6+
{
7+
public function __invoke(string $url)
8+
{
9+
$variants = [
10+
$url,
11+
str($url)->start('/'),
12+
str($url)->finish('/'),
13+
str($url)->start('/')->finish('/'),
14+
str_starts_with($url, '/') ? str($url)->substr(1) : null,
15+
];
16+
17+
if (str_contains($url, '?')) {
18+
$url = str($url)->before('?')->value();
19+
20+
$variants = array_merge($variants, [
21+
$url,
22+
str($url)->start('/'),
23+
str($url)->finish('/'),
24+
str($url)->start('/')->finish('/'),
25+
str_starts_with($url, '/') ? str($url)->substr(1) : null,
26+
]);
27+
}
28+
29+
return array_unique(array_filter($variants));
30+
}
31+
}

src/Stache/Redirects/RedirectRepository.php

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44

55
use Rias\StatamicRedirect\Contracts\RedirectRepository as RepositoryContract;
66
use Rias\StatamicRedirect\Data\Redirect;
7+
use Rias\StatamicRedirect\Eloquent\Redirects\RedirectQueryBuilder;
78
use Rias\StatamicRedirect\Enums\MatchTypeEnum;
89
use Rias\StatamicRedirect\Events\RedirectSaved;
10+
use Rias\StatamicRedirect\GenerateUrlVariants;
911
use Statamic\Data\DataCollection;
1012
use Statamic\Facades\Stache as StacheFacade;
1113
use Statamic\Stache\Stache;
@@ -41,26 +43,14 @@ public function findByUrl(string $siteHandle, string $url): ?Redirect
4143
->where('enabled', true)
4244
->where('site', $siteHandle)
4345
->where(function (RedirectQueryBuilder $query) use ($url) {
44-
$query
45-
->orWhere(function (RedirectQueryBuilder $query) use ($url) {
46-
$query->where('source_md5', md5($url))
47-
->where('source', $url);
48-
})
49-
->orWhere(function (RedirectQueryBuilder $query) use ($url) {
50-
$source = str($url)->start('/');
51-
$query->where('source_md5', md5($source))
52-
->where('source', $source);
53-
})
54-
->orWhere(function (RedirectQueryBuilder $query) use ($url) {
55-
$source = str($url)->finish('/');
56-
$query->where('source_md5', md5($source))
57-
->where('source', $source);
58-
})
59-
->orWhere(function (RedirectQueryBuilder $query) use ($url) {
60-
$source = str($url)->start('/')->finish('/');
61-
$query->where('source_md5', md5($source))
62-
->where('source', $source);
46+
$variants = app(GenerateUrlVariants::class)($url);
47+
48+
foreach ($variants as $variant) {
49+
$query->orWhere(function (RedirectQueryBuilder $query) use ($variant) {
50+
$query->where('source_md5', md5($variant))
51+
->where('source', $variant);
6352
});
53+
}
6454
})
6555
->where('matchType', MatchTypeEnum::EXACT)
6656
->orderBy('order')

0 commit comments

Comments
 (0)