From: Vincent Vanwaelscappel Date: Mon, 17 Jul 2023 16:21:08 +0000 (+0200) Subject: wip #6135 @1 X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=d142ecbd7d979f05ec642d8416185d05a4a0bbb3;p=cubist_cms-back.git wip #6135 @1 --- diff --git a/src/app/Http/Controllers/CubistFilesorURLUpload.php b/src/app/Http/Controllers/CubistFilesorURLUpload.php index ee83a52..cb433fe 100644 --- a/src/app/Http/Controllers/CubistFilesorURLUpload.php +++ b/src/app/Http/Controllers/CubistFilesorURLUpload.php @@ -3,6 +3,8 @@ namespace Cubist\Backpack\Http\Controllers; use Cubist\Backpack\Magic\Models\CubistMagicAbstractModel; +use Cubist\Util\Files\Files; +use Cubist\Util\Zip; use Illuminate\Http\UploadedFile; class CubistFilesorURLUpload @@ -16,15 +18,36 @@ class CubistFilesorURLUpload /** @var CubistMagicAbstractModel $instance */ $instance = $className::find($id); - foreach (request()->allFiles() as $files) { - if (!is_array($files)) { - $files = [$files]; + if (isset($_FILES['directory'])) { + $temp = Files::tmpdir(); + foreach ($_FILES['directory']['full_path'] as $index => $path) { + $path = $this->_removeBasePath($path, $basePath); + $dest = $temp . '/' . Files::tidyName($path); + Files::mkdir(dirname($dest)); + move_uploaded_file($_FILES['directory']['tmp_name'][$index], $dest); } - foreach ($files as $file) { - /** @var $file UploadedFile */ - $res[] = $instance->uploadFreeFile($file, $attribute); + $tmpZip = Files::tmpdir() . '/' . $basePath . '.zip'; + Zip::archive($temp, $tmpZip); + Files::rmdir($temp); + $res[] = $instance->uploadFreeFile(new \SplFileInfo($tmpZip), $attribute); + } else { + foreach (request()->allFiles() as $files) { + if (!is_array($files)) { + $files = [$files]; + } + foreach ($files as $file) { + /** @var $file UploadedFile */ + $res[] = $instance->uploadFreeFile($file, $attribute); + } } } return response()->json($res); } + + protected function _removeBasePath($path, &$basePath) + { + $e = explode('/', trim($path, '/')); + $basePath = array_shift($e); + return implode('/', $e); + } } diff --git a/src/app/Magic/Models/CubistMagicAbstractModel.php b/src/app/Magic/Models/CubistMagicAbstractModel.php index 350ad03..db86848 100644 --- a/src/app/Magic/Models/CubistMagicAbstractModel.php +++ b/src/app/Magic/Models/CubistMagicAbstractModel.php @@ -1190,7 +1190,7 @@ class CubistMagicAbstractModel extends Model implements HasMedia } /** - * @param $uploadedFile UploadedFile + * @param $uploadedFile UploadedFile|\SplFileInfo * @param $attribute string * @return string * @throws \Exception @@ -1206,16 +1206,21 @@ class CubistMagicAbstractModel extends Model implements HasMedia throw new \Exception('Base directory must be set'); } $dir = \Cubist\Util\Files\Files::mkdir($baseDirectory . '/' . $field->getAttribute('destination', '')); - $name = $uploadedFile->getClientOriginalName(); - $e = explode('.', $name); - $ext = array_pop($e); - $name = implode('.', $e); - $name = Str::slugCase($name) . '.' . $ext; + if ($uploadedFile instanceof UploadedFile) { + $name = $uploadedFile->getClientOriginalName(); + } else { + $name = $uploadedFile->getFilename(); + } + $name = \Cubist\Util\Files\Files::tidyName($name); $dest = $dir . $name; if (file_exists($dest)) { unlink($dest); } - move_uploaded_file($uploadedFile->getPathname(), $dest); + if ($uploadedFile instanceof UploadedFile) { + move_uploaded_file($uploadedFile->getPathname(), $dest); + } else { + rename($uploadedFile->getPathname(), $dest); + } return $name; } diff --git a/src/resources/views/fields/filesorurl.blade.php b/src/resources/views/fields/filesorurl.blade.php index c73a65f..aa116cb 100644 --- a/src/resources/views/fields/filesorurl.blade.php +++ b/src/resources/views/fields/filesorurl.blade.php @@ -27,6 +27,12 @@ accept="{{$field['accept']}}" @endif class="freefile-file-input" form="{{$form_id}}"> + @if(isset($field['accept']) && $field['accept'] && stristr($field['accept'],'.zip')) + + + @endif + 'form-control freefile-text-input']) @@ -178,10 +184,11 @@ @endpush @push('crud_fields_scripts') - +