From d25a05d74883c56af8ceff1232e20de365eac9c5 Mon Sep 17 00:00:00 2001 From: snipe Date: Wed, 26 Aug 2020 11:53:36 -0700 Subject: [PATCH] Misc Flysystem/image upload request fixes --- .../Controllers/AssetModelsController.php | 2 +- app/Http/Controllers/SettingsController.php | 22 +----- .../Controllers/Users/UsersController.php | 4 +- app/Http/Requests/ImageUploadRequest.php | 78 ++++++++----------- .../forms/edit/image-upload.blade.php | 2 +- 5 files changed, 41 insertions(+), 67 deletions(-) diff --git a/app/Http/Controllers/AssetModelsController.php b/app/Http/Controllers/AssetModelsController.php index 6673624fc3..4a4478464f 100755 --- a/app/Http/Controllers/AssetModelsController.php +++ b/app/Http/Controllers/AssetModelsController.php @@ -85,7 +85,7 @@ class AssetModelsController extends Controller $model->fieldset_id = e($request->input('custom_fieldset')); } - $model = $request->handleImages($model,600,null,null, public_path().'/uploads/models'); + $model = $request->handleImages($model,600,'image', public_path().'/uploads/models', 'image'); // Was it created? if ($model->save()) { diff --git a/app/Http/Controllers/SettingsController.php b/app/Http/Controllers/SettingsController.php index 53dae7c849..320f12dfca 100755 --- a/app/Http/Controllers/SettingsController.php +++ b/app/Http/Controllers/SettingsController.php @@ -410,27 +410,9 @@ class SettingsController extends Controller } - if ($request->hasFile('logo')) { - $image = $request->file('logo'); - $ext = $image->getClientOriginalExtension(); - $setting->logo = $file_name = 'logo-'.date('U').'.'. $ext; + $setting = $request->handleImages('logo',600,'logo','', 'logo'); - if ('svg' != $image->getClientOriginalExtension()) { - $upload = Image::make($image->getRealPath())->resize(null, 150, function ($constraint) { - $constraint->aspectRatio(); - $constraint->upsize(); - }); - } - - // This requires a string instead of an object, so we use ($string) - Storage::disk('public')->put($file_name, (string) $upload->encode()); - - // Remove Current image if exists - if (($setting->logo) && (file_exists($file_name))) { - Storage::disk('public')->delete($file_name); - } - - } elseif ('1' == $request->input('clear_logo')) { + if ('1' == $request->input('clear_logo')) { Storage::disk('public')->delete($setting->logo); $setting->logo = null; $setting->brand = 1; diff --git a/app/Http/Controllers/Users/UsersController.php b/app/Http/Controllers/Users/UsersController.php index 1d06b1dc03..bfba9b26f7 100755 --- a/app/Http/Controllers/Users/UsersController.php +++ b/app/Http/Controllers/Users/UsersController.php @@ -291,9 +291,11 @@ class UsersController extends Controller $user->permissions = json_encode($permissions_array); - app('App\Http\Requests\ImageUploadRequest')->handleImages($user, 600, 'image', 'avatars', 'avatar'); + // Handle uploaded avatar + app('App\Http\Requests\ImageUploadRequest')->handleImages($user, 600, 'avatar', 'avatars', 'avatar'); + //\Log::debug(print_r($user, true)); // Was the user updated? if ($user->save()) { diff --git a/app/Http/Requests/ImageUploadRequest.php b/app/Http/Requests/ImageUploadRequest.php index 72ec9021a7..39b61be45a 100644 --- a/app/Http/Requests/ImageUploadRequest.php +++ b/app/Http/Requests/ImageUploadRequest.php @@ -43,49 +43,48 @@ class ImageUploadRequest extends Request * @param String $path location for uploaded images, defaults to uploads/plural of item type. * @return SnipeModel Target asset is being checked out to. */ - public function handleImages($item, $w = 600, $fieldname = 'image', $path = null, $db_fieldname = 'image') + public function handleImages($item, $w = 600, $form_fieldname = null, $path = null, $db_fieldname = 'image') { - \Log::debug('Handle file upload'); - $type = strtolower(class_basename(get_class($item))); if (is_null($path)) { - $path = str_plural($type); + $path = str_plural($type); - if ($type=='assetmodel') { - \Log::debug('This is an asset model! Override the path'); + if ($type == 'assetmodel') { $path = 'models'; } - if ($type=='user') { - \Log::debug('This is a user! Override the path'); + if ($type == 'user') { $path = 'avatars'; } } - \Log::info('Path is: '.$path); + if (is_null($form_fieldname)) { + $form_fieldname = 'image'; + } + + // This is dumb, but we need it for overriding field names for exceptions like avatars and logo uploads + if (is_null($db_fieldname)) { + $use_db_field = $form_fieldname; + } else { + $use_db_field = $db_fieldname; + } + + + \Log::info('Image path is: '.$path); \Log::debug('Type is: '.$type); - \Log::debug('Image path is: '.$path); - \Log::debug('Image fieldname is: '.$fieldname); + \Log::debug('Form fieldname is: '.$form_fieldname); + \Log::debug('DB fieldname is: '.$use_db_field); \Log::debug('Trying to upload to '. $path); - if ($this->hasFile($fieldname)) { + \Log::debug($this->file()); + + if ($this->hasFile($form_fieldname)) { if (!config('app.lock_passwords')) { - if (!Storage::disk('public')->exists($path)) - { - \Log::debug($path); - // Storage::disk('public')->makeDirectory($path, 775); - } - - if (!is_dir($path)) { - \Log::info($path.' does not exist'); - //mkdir($path); - } - - $image = $this->file($fieldname); + $image = $this->file($form_fieldname); $ext = $image->getClientOriginalExtension(); $file_name = $type.'-'.str_random(18).'.'.$ext; @@ -120,40 +119,32 @@ class ImageUploadRequest extends Request // Remove Current image if exists - if (($item->{$fieldname}) && (Storage::disk('public')->exists($path.'/'.$item->{$fieldname}))) { - \Log::debug('A file already exists that we are replacing - we should delete the old one.'); + if (Storage::disk('public')->exists($path.'/'.$item->{$use_db_field})) { - // Assign the new filename as the fieldname - if (is_null($db_fieldname)) { - $item->{$fieldname} = $file_name; - } else { - $item->{$db_fieldname} = $file_name; - } + \Log::debug('A file already exists that we are replacing - we should delete the old one.'); try { - Storage::disk('public')->delete($path.'/'.$item->{$fieldname}); + Storage::disk('public')->delete($path.'/'.$item->{$use_db_field}); + \Log::debug('Old file '.$path.'/'.$file_name.' has been deleted.'); } catch (\Exception $e) { - \Log::debug('Could not delete old file. '.$path.'/'.$item->{$fieldname}.' does not exist?'); + \Log::debug('Could not delete old file. '.$path.'/'.$file_name.' does not exist?'); } } + $item->{$use_db_field} = $file_name; + } // If the user isn't uploading anything new but wants to delete their old image, do so } else { - + \Log::debug('No file passed for '.$form_fieldname); if ($this->input('image_delete')=='1') { + \Log::debug('Deleting image'); try { - - if (is_null($db_fieldname)) { - $item->{$fieldname} = null; - Storage::disk('public')->delete($path . '/' . $item->{$fieldname}); - } else { - $item->{$db_fieldname} = null; - Storage::disk('public')->delete($path . '/' . $item->{$fieldname}); - } + Storage::disk('public')->delete($path . '/' . $item->{$use_db_field}); + $item->{$use_db_field} = null; } catch (\Exception $e) { \Log::debug($e); @@ -163,7 +154,6 @@ class ImageUploadRequest extends Request } - return $item; } } diff --git a/resources/views/partials/forms/edit/image-upload.blade.php b/resources/views/partials/forms/edit/image-upload.blade.php index d0c89bee99..1676ce669e 100644 --- a/resources/views/partials/forms/edit/image-upload.blade.php +++ b/resources/views/partials/forms/edit/image-upload.blade.php @@ -6,7 +6,7 @@