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
/** @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);
+ }
}
}
/**
- * @param $uploadedFile UploadedFile
+ * @param $uploadedFile UploadedFile|\SplFileInfo
* @param $attribute string
* @return string
* @throws \Exception
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;
}
accept="{{$field['accept']}}"
@endif
class="freefile-file-input" form="{{$form_id}}">
+ @if(isset($field['accept']) && $field['accept'] && stristr($field['accept'],'.zip'))
+ <input type="file" multiple directory webkitdirectory name="directory[]" class="freefile-file-input-directory"
+ form="{{$form_id}}">
+ <a class="upload" href="#" data-tooltip="{{__('Clic pour charger un ou plusieurs fichiers, Cltr+Clic pour charger un dossier')}}"></a>
+ @endif
+
<input type="text" name="{{ $field['name'] }}"
value="{{ old(square_brackets_to_dots($field['name'])) ?? $field['value'] ?? $field['default'] ?? '' }}"
@include('crud::fields.inc.attributes', ['default_class' => 'form-control freefile-text-input'])
@endpush
@push('crud_fields_scripts')
- <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.form/4.3.0/jquery.form.min.js" integrity="sha512-YUkaLm+KJ5lQXDBdqBqk7EVhJAdxRnVdT2vtCzwPHSweCzyMgYV/tgGF4/dCyqtCC2eCphz0lRQgatGVdfR0ww==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.form/4.3.0/jquery.form.min.js"
+ integrity="sha512-YUkaLm+KJ5lQXDBdqBqk7EVhJAdxRnVdT2vtCzwPHSweCzyMgYV/tgGF4/dCyqtCC2eCphz0lRQgatGVdfR0ww=="
+ crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script>
jQuery(document).ready(function ($) {
-
$(document).on('change', '.freefile-file-input', function () {
var parent = $(this).closest('.freefile-file');
$(parent).addClass('loading');