Skip to content

Commit 828263b

Browse files
committed
feat: increase url length to 2048
1 parent 79556db commit 828263b

File tree

7 files changed

+99
-5
lines changed

7 files changed

+99
-5
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
use Illuminate\Database\Migrations\Migration;
4+
use Illuminate\Database\Schema\Blueprint;
5+
use Illuminate\Support\Facades\Schema;
6+
7+
class IncreaseRedirectErrorTableUrlLength extends Migration
8+
{
9+
public function up(): void
10+
{
11+
Schema::table('errors', function (Blueprint $table): void {
12+
$table->dropIndex('errors_url_index');
13+
});
14+
15+
Schema::table('errors', function (Blueprint $table): void {
16+
$table->string('url', 2048)->change();
17+
$table->string('url_md5')->index()->after('url');
18+
});
19+
}
20+
21+
public function down(): void
22+
{
23+
Schema::table('errors', function (Blueprint $table): void {
24+
$table->dropColumn('url_md5');
25+
$table->string('url')->index()->change();
26+
});
27+
}
28+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
3+
use Illuminate\Database\Migrations\Migration;
4+
use Illuminate\Database\Schema\Blueprint;
5+
use Illuminate\Support\Facades\Schema;
6+
7+
class IncreaseRedirectRedirectsTableUrlLength extends Migration
8+
{
9+
public function up(): void
10+
{
11+
Schema::table('redirects', function (Blueprint $table): void {
12+
$table->dropIndex('redirects_source_index');
13+
});
14+
15+
Schema::table('redirects', function (Blueprint $table): void {
16+
$table->string('source', 2048)->change();
17+
$table->string('source_md5')->index()->after('source');
18+
$table->string('destination', 2048)->change();
19+
});
20+
}
21+
22+
public function down(): void
23+
{
24+
Schema::table('redirects', function (Blueprint $table): void {
25+
$table->dropColumn('source_md5');
26+
$table->string('source')->index()->change();
27+
$table->string('destination')->change();
28+
});
29+
}
30+
}

src/Data/Error.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ public function getConnectionName()
3737

3838
protected static function booted()
3939
{
40+
self::saving(function ($model) {
41+
$model->url_md5 = md5($model->url);
42+
});
4043
self::deleting(function ($error) {
4144
$error->hits()->delete();
4245
});
@@ -70,6 +73,6 @@ public function addHit(int $timestamp, array $data = []): ?Hit
7073

7174
public static function findByUrl(string $url): ?self
7275
{
73-
return self::where('url', $url)->first();
76+
return self::where('url_md5', md5($url))->where('url', $url)->first();
7477
}
7578
}

src/Data/Redirect.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ class Redirect implements Localization, RedirectContract
2929
/** @var string */
3030
protected $source;
3131

32+
/** @var string */
33+
protected $source_md5;
34+
3235
/** @var string */
3336
protected $destination;
3437

@@ -62,6 +65,11 @@ public function source($source = null)
6265
return $this->fluentlyGetOrSet('source')->args(func_get_args());
6366
}
6467

68+
public function source_md5($source_md5 = null)
69+
{
70+
return $this->fluentlyGetOrSet('source_md5')->args(func_get_args());
71+
}
72+
6573
public function destination($destination = null)
6674
{
6775
return $this->fluentlyGetOrSet('destination')->args(func_get_args());

src/RedirectServiceProvider.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,11 +118,13 @@ public function boot()
118118

119119
$this->publishes([
120120
__DIR__ . '/../database/migrations/create_redirect_error_tables.php.stub' => database_path('migrations/' . date('Y_m_d_His', time()) . '_create_redirect_error_tables.php'),
121+
__DIR__ . '/../database/migrations/increase_redirect_error_table_url_length.php.stub' => database_path('migrations/' . date('Y_m_d_His', time()) . '_increase_redirect_error_table_url_length.php'),
121122
], 'statamic-redirect-error-migrations');
122123

123124
$this->publishes([
124125
__DIR__ . '/../database/migrations/create_redirect_redirects_table.php.stub' => database_path('migrations/' . date('Y_m_d_His', time()) . '_create_redirect_redirects_table.php'),
125126
__DIR__ . '/../database/migrations/add_description_to_redirect_redirects_table.php.stub' => database_path('migrations/' . date('Y_m_d_His', time()) . '_add_description_to_redirect_redirects_table.php'),
127+
__DIR__ . '/../database/migrations/increase_redirect_redirects_table_url_length.php.stub' => database_path('migrations/' . date('Y_m_d_His', time()) . '_increase_redirect_redirects_table_url_length.php'),
126128
], 'statamic-redirect-redirect-migrations');
127129
}
128130

@@ -240,6 +242,8 @@ protected function bootDatabaseForErrors()
240242
DB::setDefaultConnection('redirect-sqlite');
241243
require_once(__DIR__ . '/../database/migrations/create_redirect_error_tables.php.stub');
242244
(new \CreateRedirectErrorTables())->up();
245+
require_once(__DIR__ . '/../database/migrations/increase_redirect_error_table_url_length.php.stub');
246+
(new \IncreaseRedirectErrorTableUrlLength())->up();
243247
DB::setDefaultConnection($defaultConnection);
244248
}
245249

@@ -263,6 +267,8 @@ protected function bootDatabaseForRedirects()
263267
(new \CreateRedirectRedirectsTable())->up();
264268
require_once(__DIR__ . '/../database/migrations/add_description_to_redirect_redirects_table.php.stub');
265269
(new \AddDescriptionToRedirectRedirectsTable())->up();
270+
require_once(__DIR__ . '/../database/migrations/increase_redirect_redirects_table_url_length.php.stub');
271+
(new \IncreaseRedirectRedirectsTableUrlLength())->up();
266272

267273
DB::setDefaultConnection($defaultConnection);
268274
}

src/Stache/Redirects/RedirectRepository.php

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,25 @@ public function findByUrl(string $siteHandle, string $url): ?Redirect
4242
->where('locale', $siteHandle)
4343
->where(function (RedirectQueryBuilder $query) use ($url) {
4444
$query
45-
->orWhere('source', $url)
46-
->orWhere('source', str($url)->start('/'))
47-
->orWhere('source', str($url)->finish('/'))
48-
->orWhere('source', str($url)->start('/')->finish('/'));
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);
63+
});
4964
})
5065
->where('matchType', MatchTypeEnum::EXACT)
5166
->orderBy('order')
@@ -86,6 +101,7 @@ public function save($redirect)
86101
if (! $redirect->id()) {
87102
$redirect->id(StacheFacade::generateId());
88103
}
104+
$redirect->source_md5(md5($redirect->source()));
89105

90106
StacheFacade::store('redirects')->save($redirect);
91107

tests/TestCase.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,9 @@ protected function defineDatabaseMigrations(): void
9494

9595
include_once __DIR__ . '/../database/migrations/create_redirect_error_tables.php.stub';
9696
(new \CreateRedirectErrorTables())->up();
97+
98+
include_once __DIR__ . '/../database/migrations/increase_redirect_error_table_url_length.php.stub';
99+
(new \IncreaseRedirectErrorTableUrlLength())->up();
97100
}
98101

99102
/**

0 commit comments

Comments
 (0)