Fixed: Sluggify created folder
continuous-integration/drone/push Build encountered an error
Details
continuous-integration/drone/push Build encountered an error
Details
This commit is contained in:
parent
6c9d9b908b
commit
d2253a3417
28
Plugin.php
28
Plugin.php
|
@ -16,6 +16,7 @@ use MediaLibrary;
|
|||
use Queue;
|
||||
use System\Classes\PluginBase;
|
||||
use System\Models\File;
|
||||
use ValidationException;
|
||||
|
||||
/**
|
||||
* resizer Plugin Information File.
|
||||
|
@ -65,8 +66,32 @@ class Plugin extends PluginBase
|
|||
|
||||
app()->bind('resize', fn () => app(CacheManager::class));
|
||||
|
||||
Event::listen('media.folder.create', function ($widget, string $folder) {
|
||||
$folder = '/'.trim($folder, '/');
|
||||
$pathinfo = pathinfo($folder);
|
||||
|
||||
if ('/' === $pathinfo['dirname']) {
|
||||
$sluggedFolder = '/'.StorageMediaPath::sluggifyString(trim($folder, '/'));
|
||||
if ($sluggedFolder !== $folder) {
|
||||
if (MediaLibrary::instance()->folderExists($sluggedFolder)) {
|
||||
MediaLibrary::instance()->deleteFolder($folder);
|
||||
throw new ValidationException(['error' => 'Ordner existiert bereits.']);
|
||||
}
|
||||
MediaLibrary::instance()->moveFolder($folder, $sluggedFolder);
|
||||
}
|
||||
} else {
|
||||
$sluggedFolder = $pathinfo['dirname'].'/'.StorageMediaPath::sluggifyString($pathinfo['filename']);
|
||||
if ($sluggedFolder !== $folder) {
|
||||
if (MediaLibrary::instance()->folderExists($sluggedFolder)) {
|
||||
MediaLibrary::instance()->deleteFolder($folder);
|
||||
throw new ValidationException(['error' => 'Ordner existiert bereits.']);
|
||||
}
|
||||
MediaLibrary::instance()->moveFolder($folder, $sluggedFolder);
|
||||
}
|
||||
}
|
||||
});
|
||||
Event::listen('media.file.upload', function ($widget, $filePath, $uploadedFile) {
|
||||
$sluggedPath = (new StorageMediaPath($filePath))->sluggify();
|
||||
$sluggedPath = (new StorageMediaPath($filePath))->sluggifyPath();
|
||||
if ($filePath !== $sluggedPath) {
|
||||
MediaLibrary::instance()->moveFile($filePath, $sluggedPath);
|
||||
}
|
||||
|
@ -77,7 +102,6 @@ class Plugin extends PluginBase
|
|||
Event::listen('media.file.delete', function ($widget, $filePath) {
|
||||
Queue::push(DeleteJob::class, [$filePath], Setting::get('queue'));
|
||||
});
|
||||
|
||||
Event::listen('media.file.move', function ($widget, $old, $new) {
|
||||
if ((new StorageMediaPath($new))->shouldProcess() || (new StorageMediaPath($old))->shouldProcess()) {
|
||||
Queue::push(MoveJob::class, [$old, $new.'/'.pathinfo($old, PATHINFO_FILENAME)], Setting::get('queue'));
|
||||
|
|
|
@ -106,21 +106,29 @@ abstract class MediaPath
|
|||
return $return;
|
||||
}
|
||||
|
||||
public function sluggifyPath(): string
|
||||
{
|
||||
$fileinfo = pathinfo($this->path);
|
||||
$filename = $fileinfo['dirname'].'/';
|
||||
|
||||
return $filename
|
||||
.static::sluggifyString($fileinfo['filename'])
|
||||
.'.'
|
||||
.$fileinfo['extension'];
|
||||
}
|
||||
|
||||
protected function storagePath(): string
|
||||
{
|
||||
return "media/{$this->normal()}";
|
||||
}
|
||||
|
||||
public function sluggify(): string
|
||||
public static function sluggifyString(string $input): string
|
||||
{
|
||||
$fileinfo = pathinfo($this->path);
|
||||
$filename = $fileinfo['dirname'].'/';
|
||||
|
||||
return $filename.str_slug(strtr($fileinfo['filename'], [
|
||||
return str_slug(strtr($input, [
|
||||
'ö' => 'oe',
|
||||
'ä' => 'ae',
|
||||
'ü' => 'ue',
|
||||
'ß' => 'ss',
|
||||
])).'.'.$fileinfo['extension'];
|
||||
]));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,59 @@
|
|||
<?php
|
||||
|
||||
namespace Aweos\Resizer\Tests;
|
||||
|
||||
use Event;
|
||||
use Illuminate\Http\UploadedFile;
|
||||
use MediaLibrary;
|
||||
use Storage;
|
||||
|
||||
class SlugTest extends TestCase
|
||||
{
|
||||
public function setUp(): void
|
||||
{
|
||||
parent::setUp();
|
||||
Storage::fake('local');
|
||||
$this->media = MediaLibrary::instance();
|
||||
}
|
||||
|
||||
public function testDontRenameFolderIfSluggingIsNotNeeded(): void
|
||||
{
|
||||
$file = UploadedFile::fake()->image('test.jpg', 500, 600);
|
||||
$this->media->makeFolder('testbb');
|
||||
|
||||
Event::fire('media.folder.create', [null, '//testbb', null]);
|
||||
|
||||
Storage::disk('local')->assertExists('media/testbb');
|
||||
}
|
||||
|
||||
public function testRenameFolder(): void
|
||||
{
|
||||
$file = UploadedFile::fake()->image('test.jpg', 500, 600);
|
||||
$this->media->makeFolder('test bb');
|
||||
|
||||
Event::fire('media.folder.create', [null, '//test bb', null]);
|
||||
|
||||
Storage::disk('local')->assertExists('media/test-bb');
|
||||
Storage::disk('local')->assertMissing('media/test bb');
|
||||
}
|
||||
|
||||
public function testRenameSubfolder(): void
|
||||
{
|
||||
$file = UploadedFile::fake()->image('test.jpg', 500, 600);
|
||||
$this->media->makeFolder('test/aa bb');
|
||||
|
||||
Event::fire('media.folder.create', [null, '/test/aa bb', null]);
|
||||
|
||||
Storage::disk('local')->assertExists('media/test/aa-bb');
|
||||
}
|
||||
|
||||
public function testRenameSubfolderWithDoubleSlash(): void
|
||||
{
|
||||
$file = UploadedFile::fake()->image('test.jpg', 500, 600);
|
||||
$this->media->makeFolder('test/aa bb');
|
||||
|
||||
Event::fire('media.folder.create', [null, '//test/aa bb', null]);
|
||||
|
||||
Storage::disk('local')->assertExists('media/test/aa-bb');
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue