Skip to content

Commit 4b469b9

Browse files
authored
[5.x] Pass original upload filename into AssetUploaded event (#11423)
1 parent a077670 commit 4b469b9

9 files changed

Lines changed: 37 additions & 15 deletions

src/Assets/Asset.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -930,7 +930,7 @@ public function upload(UploadedFile $file)
930930
->syncOriginal()
931931
->save();
932932

933-
AssetUploaded::dispatch($this);
933+
AssetUploaded::dispatch($this, $file->getClientOriginalName());
934934

935935
AssetCreated::dispatch($this);
936936

@@ -948,7 +948,7 @@ public function reupload(ReplacementFile $file)
948948
$this->clearCaches();
949949
$this->writeMeta($this->generateMeta());
950950

951-
AssetReuploaded::dispatch($this);
951+
AssetReuploaded::dispatch($this, $file->basename());
952952

953953
return $this;
954954
}

src/Assets/ReplacementFile.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ public function extension()
2424
return pathinfo($this->path, PATHINFO_EXTENSION);
2525
}
2626

27+
public function basename()
28+
{
29+
return pathinfo($this->path, PATHINFO_BASENAME);
30+
}
31+
2732
public function writeTo(Filesystem $disk, $path)
2833
{
2934
$disk->put(

src/Events/AssetReuploaded.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
class AssetReuploaded extends Event implements ProvidesCommitMessage
88
{
9-
public function __construct(public $asset)
9+
public function __construct(public $asset, public $originalFilename)
1010
{
1111
}
1212

src/Events/AssetUploaded.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
class AssetUploaded extends Event implements ProvidesCommitMessage
88
{
9-
public function __construct(public $asset)
9+
public function __construct(public $asset, public $originalFilename)
1010
{
1111
}
1212

tests/Assets/AssetTest.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2080,6 +2080,22 @@ public function it_appends_timestamp_to_uploaded_files_filename_if_it_already_ex
20802080
});
20812081
}
20822082

2083+
#[Test]
2084+
public function it_sanitizes_uploaded_filenames_but_passes_the_original_name_into_the_event()
2085+
{
2086+
Event::fake();
2087+
$asset = $this->container->makeAsset('path/to/Sanitize This Asset © Photographer.JPG');
2088+
Facades\AssetContainer::shouldReceive('findByHandle')->with('test_container')->andReturn($this->container);
2089+
2090+
$asset->upload(UploadedFile::fake()->image('Sanitize This Asset © Photographer.JPG'));
2091+
2092+
Storage::disk('test')->assertExists('path/to/sanitize-this-asset--photographer.jpg');
2093+
$this->assertEquals('path/to/sanitize-this-asset--photographer.jpg', $asset->path());
2094+
Event::assertDispatched(AssetUploaded::class, function ($event) use ($asset) {
2095+
return $event->asset = $asset && $event->originalFilename === 'Sanitize This Asset © Photographer.JPG';
2096+
});
2097+
}
2098+
20832099
#[Test]
20842100
public function it_lowercases_uploaded_filenames_by_default()
20852101
{

tests/Assets/GeneratePresetImageManipulationsOnUpload.php

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ public function it_subscribes()
2828

2929
#[Test]
3030
#[DataProvider('presetProvider')]
31-
public function presets_are_generated_for_images($event, $extension, $shouldGenerate)
31+
public function presets_are_generated_for_images($event, $basename, $shouldGenerate)
3232
{
3333
$generator = Mockery::mock(PresetGenerator::class);
34-
$asset = (new Asset)->path('foo.'.$extension);
34+
$asset = (new Asset)->path($basename);
3535

3636
if ($shouldGenerate) {
3737
$generator->shouldReceive('generate')->once()->with($asset);
@@ -41,19 +41,19 @@ public function presets_are_generated_for_images($event, $extension, $shouldGene
4141

4242
$listener = new GeneratePresetImageManipulations($generator);
4343

44-
$listener->handle(new $event($asset));
44+
$listener->handle(new $event($asset, $basename));
4545
}
4646

4747
public static function presetProvider()
4848
{
4949
return [
50-
[AssetUploaded::class, 'jpg', true],
51-
[AssetUploaded::class, 'svg', false],
52-
[AssetUploaded::class, 'txt', false],
50+
[AssetUploaded::class, 'foo.jpg', true],
51+
[AssetUploaded::class, 'foo.svg', false],
52+
[AssetUploaded::class, 'foo.txt', false],
5353

54-
[AssetReuploaded::class, 'jpg', true],
55-
[AssetReuploaded::class, 'svg', false],
56-
[AssetReuploaded::class, 'txt', false],
54+
[AssetReuploaded::class, 'foo.jpg', true],
55+
[AssetReuploaded::class, 'foo.svg', false],
56+
[AssetReuploaded::class, 'foo.txt', false],
5757
];
5858
}
5959
}

tests/Feature/Assets/ClearAssetGlideCacheTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public function it_clears_when_reuploading()
4242
$asset = Mockery::mock(Asset::class);
4343
Glide::shouldReceive('clearAsset')->with($asset)->once();
4444

45-
app(ClearAssetGlideCache::class)->handleReuploaded(new AssetReuploaded($asset));
45+
app(ClearAssetGlideCache::class)->handleReuploaded(new AssetReuploaded($asset, 'foo.jpg'));
4646
}
4747

4848
#[Test]

tests/Feature/Assets/ReuploadAssetTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,6 @@ public function glide_cache_is_cleared_and_presets_are_regenerated_when_reupload
7575
Glide::shouldReceive('clearAsset')->withArgs(fn ($arg1) => $arg1->id() === $asset->id())->once()->globally()->ordered();
7676
$this->mock(PresetGenerator::class)->shouldReceive('generate')->withArgs(fn ($arg1) => $arg1->id() === $asset->id())->once()->globally()->ordered();
7777

78-
AssetReuploaded::dispatch($asset);
78+
AssetReuploaded::dispatch($asset, 'test.jpg');
7979
}
8080
}

tests/Git/GitEventTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,7 @@ public function it_commits_when_asset_is_reuploaded()
442442

443443
$file = Mockery::mock(ReplacementFile::class);
444444
$file->shouldReceive('extension')->andReturn('txt');
445+
$file->shouldReceive('basename')->andReturn('file.txt');
445446
$file->shouldReceive('writeTo');
446447

447448
$this->makeAsset()->reupload($file);

0 commit comments

Comments
 (0)