diff --git a/app/Console/Commands/RestoreFromBackup.php b/app/Console/Commands/RestoreFromBackup.php index c5e3a4c790..b1f1753564 100644 --- a/app/Console/Commands/RestoreFromBackup.php +++ b/app/Console/Commands/RestoreFromBackup.php @@ -149,7 +149,7 @@ class RestoreFromBackup extends Command $boring_files[] = $raw_path; continue; } - if (@pathinfo($raw_path)['extension'] == 'sql') { + if (@pathinfo($raw_path, PATHINFO_EXTENSION) == 'sql') { \Log::debug("Found a sql file!"); $sqlfiles[] = $raw_path; $sqlfile_indices[] = $i; diff --git a/app/Http/Controllers/Api/ImportController.php b/app/Http/Controllers/Api/ImportController.php index e5f0c6ab1f..9742cc1644 100644 --- a/app/Http/Controllers/Api/ImportController.php +++ b/app/Http/Controllers/Api/ImportController.php @@ -127,7 +127,7 @@ class ImportController extends Controller $this->authorize('import'); // Run a backup immediately before processing - if ($request->has('run-backup')) { + if ($request->get('run-backup')) { \Log::debug('Backup manually requested via importer'); Artisan::call('backup:run'); } else { diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php index 739376e3ab..cf5f49feb0 100755 --- a/app/Http/Controllers/ProfileController.php +++ b/app/Http/Controllers/ProfileController.php @@ -67,37 +67,9 @@ class ProfileController extends Controller $user->location_id = $request->input('location_id'); } + // Handle the avatar upload and/or delete if necessary + app('\App\Http\Requests\ImageUploadRequest')->handleImages($user, 600, 'avatar', 'avatars', 'avatar'); - if ($request->input('avatar_delete') == 1) { - $user->avatar = null; - } - - - if ($request->hasFile('avatar')) { - $path = 'avatars'; - - if (! Storage::disk('public')->exists($path)) { - Storage::disk('public')->makeDirectory($path, 775); - } - - $upload = $image = $request->file('avatar'); - $ext = $image->getClientOriginalExtension(); - $file_name = 'avatar-'.str_random(18).'.'.$ext; - - if ($image->getClientOriginalExtension() != 'svg') { - $upload = Image::make($image->getRealPath())->resize(84, 84); - } - - // This requires a string instead of an object, so we use ($string) - Storage::disk('public')->put($path.'/'.$file_name, (string) $upload->encode()); - - // Remove Current image if exists - if (($user->avatar) && (Storage::disk('public')->exists($path.'/'.$user->avatar))) { - Storage::disk('public')->delete($path.'/'.$user->avatar); - } - - $user->avatar = $file_name; - } if ($user->save()) { return redirect()->route('profile')->with('success', 'Account successfully updated'); diff --git a/app/Http/Controllers/Users/UsersController.php b/app/Http/Controllers/Users/UsersController.php index 9d322ca4d9..37b62f80e2 100755 --- a/app/Http/Controllers/Users/UsersController.php +++ b/app/Http/Controllers/Users/UsersController.php @@ -131,7 +131,7 @@ class UsersController extends Controller $user->permissions = json_encode($permissions_array); // we have to invoke the - app(\App\Http\Requests\ImageUploadRequest::class)->handleImages($user, 600, 'image', 'avatars', 'avatar'); + app(ImageUploadRequest::class)->handleImages($user, 600, 'avatar', 'avatars', 'avatar'); if ($user->save()) { if ($request->filled('groups')) { @@ -297,7 +297,7 @@ class UsersController extends Controller $user->permissions = json_encode($permissions_array); // Handle uploaded avatar - app(\App\Http\Requests\ImageUploadRequest::class)->handleImages($user, 600, 'avatar', 'avatars', 'avatar'); + app(ImageUploadRequest::class)->handleImages($user, 600, 'avatar', 'avatars', 'avatar'); //\Log::debug(print_r($user, true)); diff --git a/app/Http/Requests/ImageUploadRequest.php b/app/Http/Requests/ImageUploadRequest.php index 1b0b051366..6fb6ead210 100644 --- a/app/Http/Requests/ImageUploadRequest.php +++ b/app/Http/Requests/ImageUploadRequest.php @@ -63,11 +63,13 @@ 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, $form_fieldname = null, $path = null, $db_fieldname = 'image') + public function handleImages($item, $w = 600, $form_fieldname = 'image', $path = null, $db_fieldname = 'image') { + $type = strtolower(class_basename(get_class($item))); if (is_null($path)) { + $path = str_plural($type); if ($type == 'assetmodel') { @@ -79,42 +81,31 @@ class ImageUploadRequest extends Request } } - 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; - } - - - // ConvertBase64ToFiles just changes object type, - // as it cannot currently insert files to $this->files if ($this->offsetGet($form_fieldname) instanceof UploadedFile) { - $image=$this->offsetGet($form_fieldname); + $image = $this->offsetGet($form_fieldname); + \Log::debug('Image is an instance of UploadedFile'); + } elseif ($this->hasFile($form_fieldname)) { + $image = $this->file($form_fieldname); + \Log::debug('Just use regular upload for '.$form_fieldname); } else { - if ($this->hasFile($form_fieldname)) { - $image = $this->file($form_fieldname); - } + \Log::debug('No image found for form fieldname: '.$form_fieldname); } if (isset($image)) { - \Log::debug($image); if (!config('app.lock_passwords')) { $ext = $image->getClientOriginalExtension(); - $file_name = $type.'-'.$form_fieldname.'-'.str_random(10).'.'.$ext; + $file_name = $type.'-'.$form_fieldname.'-'.$item->id.'-'.str_random(10).'.'.$ext; \Log::info('File name will be: '.$file_name); \Log::debug('File extension is: '.$ext); if (($image->getClientOriginalExtension() !== 'webp') && ($image->getClientOriginalExtension() !== 'svg')) { + \Log::debug('Not an SVG or webp - resize'); \Log::debug('Trying to upload to: '.$path.'/'.$file_name); + $upload = Image::make($image->getRealPath())->resize(null, $w, function ($constraint) { $constraint->aspectRatio(); $constraint->upsize(); @@ -122,6 +113,7 @@ class ImageUploadRequest extends Request // This requires a string instead of an object, so we use ($string) Storage::disk('public')->put($path.'/'.$file_name, (string) $upload->encode()); + } else { // If the file is a webp, we need to just move it since webp support // needs to be compiled into gd for resizing to be available @@ -146,30 +138,30 @@ class ImageUploadRequest extends Request } // Remove Current image if exists - if (($item->{$use_db_field}!='') && (Storage::disk('public')->exists($path.'/'.$item->{$use_db_field}))) { + if (($item->{$form_fieldname}!='') && (Storage::disk('public')->exists($path.'/'.$item->{$db_fieldname}))) { \Log::debug('A file already exists that we are replacing - we should delete the old one.'); try { - Storage::disk('public')->delete($path.'/'.$item->{$use_db_field}); + Storage::disk('public')->delete($path.'/'.$item->{$form_fieldname}); \Log::debug('Old file '.$path.'/'.$file_name.' has been deleted.'); } catch (\Exception $e) { \Log::debug('Could not delete old file. '.$path.'/'.$file_name.' does not exist?'); } } - $item->{$use_db_field} = $file_name; + $item->{$db_fieldname} = $file_name; } + // If the user isn't uploading anything new but wants to delete their old image, do so - } else { - if ($this->input('image_delete') == '1') { - \Log::debug('Deleting image'); - try { - Storage::disk('public')->delete($path.'/'.$item->{$use_db_field}); - $item->{$use_db_field} = null; - } catch (\Exception $e) { - \Log::debug($e); - } + } elseif ($this->input('image_delete') == '1') { + \Log::debug('Deleting image'); + try { + Storage::disk('public')->delete($path.'/'.$item->{$db_fieldname}); + $item->{$db_fieldname} = null; + } catch (\Exception $e) { + \Log::debug($e); } + } return $item; diff --git a/app/Models/User.php b/app/Models/User.php old mode 100755 new mode 100644 index b51d23626f..fabcd04357 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -62,7 +62,9 @@ class User extends SnipeModel implements AuthenticatableContract, AuthorizableCo 'start_date', 'end_date', 'scim_externalid', - 'vipuser', + 'avatar', + 'gravatar', + 'vipuser`, ]; protected $casts = [ diff --git a/public/css/dist/skins/skin-contrast.css b/public/css/dist/skins/skin-contrast.css index b5d7fc4e9b..50dfc577e2 100644 --- a/public/css/dist/skins/skin-contrast.css +++ b/public/css/dist/skins/skin-contrast.css @@ -149,6 +149,13 @@ background-color: #000000; color: #fff; } +a.btn.btn-link.text-left { + color: #001F3F; + border: 1px solid #000; +} +a.btn.btn-link.text-left:hover { + color: #001F3F; +} a { color: #001F3F; } @@ -163,9 +170,6 @@ a.btn:hover { color: #fff; text-decoration: underline; } -a.btn:visited { - color: #fff; -} .text-primary { color: #000000; } diff --git a/public/css/dist/skins/skin-contrast.min.css b/public/css/dist/skins/skin-contrast.min.css index b5d7fc4e9b..50dfc577e2 100644 --- a/public/css/dist/skins/skin-contrast.min.css +++ b/public/css/dist/skins/skin-contrast.min.css @@ -149,6 +149,13 @@ background-color: #000000; color: #fff; } +a.btn.btn-link.text-left { + color: #001F3F; + border: 1px solid #000; +} +a.btn.btn-link.text-left:hover { + color: #001F3F; +} a { color: #001F3F; } @@ -163,9 +170,6 @@ a.btn:hover { color: #fff; text-decoration: underline; } -a.btn:visited { - color: #fff; -} .text-primary { color: #000000; } diff --git a/public/mix-manifest.json b/public/mix-manifest.json index 719da79a95..b200128c7d 100644 --- a/public/mix-manifest.json +++ b/public/mix-manifest.json @@ -16,7 +16,7 @@ "/css/dist/skins/skin-black.css": "/css/dist/skins/skin-black.css?id=76482123f6c70e866d6b971ba91de7bb", "/css/dist/skins/skin-green-dark.css": "/css/dist/skins/skin-green-dark.css?id=c0d21166315b7c2cdd4819fa4a5e4d1e", "/css/dist/skins/skin-green.css": "/css/dist/skins/skin-green.css?id=0a82a6ae6bb4e58fe62d162c4fb50397", - "/css/dist/skins/skin-contrast.css": "/css/dist/skins/skin-contrast.css?id=8e538625ebd4b8096e150d1aa483547b", + "/css/dist/skins/skin-contrast.css": "/css/dist/skins/skin-contrast.css?id=da6c7997d9de2f8329142399f0ce50da", "/css/dist/skins/skin-red.css": "/css/dist/skins/skin-red.css?id=44bf834f2110504a793dadec132a5898", "/css/dist/all.css": "/css/dist/all.css?id=ef030b613d45620b907cf0184a14e868", "/css/blue.png": "/css/blue.png?id=e83a6c29e04fe851f2122815b2e4b150", @@ -49,5 +49,5 @@ "/css/dist/skins/skin-purple-dark.min.css": "/css/dist/skins/skin-purple-dark.min.css?id=713b1205aa2d7c9db282f8cd5754c0e4", "/css/dist/skins/skin-orange.min.css": "/css/dist/skins/skin-orange.min.css?id=6f0563e726c2fe4fab4026daaa5bfdf2", "/css/dist/skins/skin-orange-dark.min.css": "/css/dist/skins/skin-orange-dark.min.css?id=f343f659ca1d45534d2c2c3cc30fb619", - "/css/dist/skins/skin-contrast.min.css": "/css/dist/skins/skin-contrast.min.css?id=8e538625ebd4b8096e150d1aa483547b" + "/css/dist/skins/skin-contrast.min.css": "/css/dist/skins/skin-contrast.min.css?id=da6c7997d9de2f8329142399f0ce50da" } diff --git a/resources/assets/less/skins/skin-contrast.less b/resources/assets/less/skins/skin-contrast.less index f66e76676b..eba7001b0b 100644 --- a/resources/assets/less/skins/skin-contrast.less +++ b/resources/assets/less/skins/skin-contrast.less @@ -84,7 +84,13 @@ color: #fff; } } - +a.btn.btn-link.text-left{ + color:@navy; + border: 1px solid #000; +} +a.btn.btn-link.text-left:hover{ + color:@navy; +} a { color: @navy; @@ -102,10 +108,6 @@ a.btn { &:hover { color: #fff; text-decoration: underline; - - } - &:visited { - color: #fff; } } diff --git a/resources/views/accessories/edit.blade.php b/resources/views/accessories/edit.blade.php index d6233d4e5a..532336182b 100755 --- a/resources/views/accessories/edit.blade.php +++ b/resources/views/accessories/edit.blade.php @@ -21,22 +21,27 @@ @include ('partials.forms.edit.purchase_cost') @include ('partials.forms.edit.quantity') @include ('partials.forms.edit.minimum_quantity') - +@include ('partials.forms.edit.notes') -@if ($item->image) -
- -
- {{ Form::checkbox('image_delete') }} - - {!! $errors->first('image_delete', '') !!} +@if (($item->image) && ($item->image!='')) +
+
+ +
+
+
+
+ + {!! $errors->first('image_delete', ':message') !!}
@endif -@include ('partials.forms.edit.notes') - @include ('partials.forms.edit.image-upload') @stop diff --git a/resources/views/account/profile.blade.php b/resources/views/account/profile.blade.php index 0764a3033c..86abc7aff9 100755 --- a/resources/views/account/profile.blade.php +++ b/resources/views/account/profile.blade.php @@ -104,16 +104,20 @@ - @if ($user->avatar) -
- -
-