diff --git a/src/Controllers/FolderController.php b/src/Controllers/FolderController.php index 39c53fbb..d03e33fd 100644 --- a/src/Controllers/FolderController.php +++ b/src/Controllers/FolderController.php @@ -2,6 +2,8 @@ namespace UniSharp\LaravelFilemanager\Controllers; +use Illuminate\Support\Str; + class FolderController extends LfmController { /** @@ -42,13 +44,20 @@ public function getAddfolder() try { if ($folder_name === null || $folder_name == '') { return $this->helper->error('folder-name'); - } elseif ($this->lfm->setName($folder_name)->exists()) { + } + if ($this->lfm->setName($folder_name)->exists()) { return $this->helper->error('folder-exist'); - } elseif (config('lfm.alphanumeric_directory') && preg_match('/[^\w-]/i', $folder_name)) { - return $this->helper->error('folder-alnum'); - } else { - $this->lfm->setName($folder_name)->createFolder(); } + + if (config('lfm.alphanumeric_directory')) { + if (config('lfm.convert_to_alphanumeric')) { + $folder_name = Str::slug($folder_name); + } elseif (preg_match('/[^\w\-_]/i', $folder_name)) { + return $this->helper->error('folder-alnum'); + } + } + + $this->lfm->setName($folder_name)->createFolder(); } catch (\Exception $e) { return $e->getMessage(); } diff --git a/src/Controllers/RenameController.php b/src/Controllers/RenameController.php index 0bb2419e..ddb127e7 100644 --- a/src/Controllers/RenameController.php +++ b/src/Controllers/RenameController.php @@ -2,6 +2,7 @@ namespace UniSharp\LaravelFilemanager\Controllers; +use Illuminate\Support\Str; use UniSharp\LaravelFilemanager\Events\ImageIsRenaming; use UniSharp\LaravelFilemanager\Events\ImageWasRenamed; use UniSharp\LaravelFilemanager\Events\FolderIsRenaming; @@ -26,18 +27,34 @@ public function getRename() } } - if (config('lfm.alphanumeric_directory') && preg_match('/[^\w-]/i', $new_name)) { - return parent::error('folder-alnum'); - // return parent::error('file-alnum'); - } elseif ($this->lfm->setName($new_name)->exists()) { - return parent::error('rename'); - } + if ($is_directory && config('lfm.alphanumeric_directory')) { + if (config('lfm.convert_to_alphanumeric')) { + $new_name = Str::slug($new_name); + } - if (! $is_directory) { + if (preg_match('/[^\w\-_]/i', $new_name)) { + return parent::error('folder-alnum'); + } + } elseif (!$is_directory && config('lfm.alphanumeric_filename')) { + // Remove extension for checks to alphanum characters $extension = $old_file->extension(); if ($extension) { - $new_name = str_replace('.' . $extension, '', $new_name) . '.' . $extension; + $new_name = str_replace('.' . $extension, '', $new_name); + } + + if (config('lfm.convert_to_alphanumeric')) { + $new_name = Str::slug($new_name); } + + if (preg_match('/[^\w\-_]/i', $new_name)) { + return parent::error('file-alnum'); + } + + $new_name .= ($extension) ? '.' . $extension : null; + } + + if ($this->lfm->setName($new_name)->exists()) { + return parent::error('rename'); } $new_file = $this->lfm->setName($new_name)->path('absolute'); diff --git a/src/LfmPath.php b/src/LfmPath.php index 7db5e767..a17aeb98 100644 --- a/src/LfmPath.php +++ b/src/LfmPath.php @@ -3,6 +3,7 @@ namespace UniSharp\LaravelFilemanager; use Illuminate\Container\Container; +use Illuminate\Support\Str; use Intervention\Image\Facades\Image; use Symfony\Component\HttpFoundation\File\UploadedFile; use UniSharp\LaravelFilemanager\Events\ImageIsUploading; @@ -276,7 +277,7 @@ private function getNewName($file) if (config('lfm.rename_file') === true) { $new_file_name = uniqid(); } elseif (config('lfm.alphanumeric_filename') === true) { - $new_file_name = preg_replace('/[^A-Za-z0-9\-\']/', '_', $new_file_name); + $new_file_name = Str::slug($new_file_name); } $extension = $file->getClientOriginalExtension(); diff --git a/src/config/lfm.php b/src/config/lfm.php index 3ef62d23..9e2405e2 100644 --- a/src/config/lfm.php +++ b/src/config/lfm.php @@ -98,6 +98,9 @@ 'alphanumeric_directory' => false, + // When creating folder or renaming folder/file, automatically convert to alphanumeric instead of error + 'convert_to_alphanumeric' => false, + 'should_validate_size' => false, 'should_validate_mime' => false,