diff --git a/app/Http/Controllers/Accessories/AccessoriesController.php b/app/Http/Controllers/Accessories/AccessoriesController.php index 20a6266474..ae4e79bc51 100755 --- a/app/Http/Controllers/Accessories/AccessoriesController.php +++ b/app/Http/Controllers/Accessories/AccessoriesController.php @@ -77,7 +77,18 @@ class AccessoriesController extends Controller $accessory->supplier_id = request('supplier_id'); $accessory->notes = request('notes'); - $accessory = $request->handleImages($accessory); + if ($request->has('use_cloned_image')) { + $cloned_model_img = Accessory::select('image')->find($request->input('clone_image_from_id')); + if ($cloned_model_img) { + $new_image_name = 'clone-'.date('U').'-'.$cloned_model_img->image; + $new_image = 'accessories/'.$new_image_name; + Storage::disk('public')->copy('accessories/'.$cloned_model_img->image, $new_image); + $accessory->image = $new_image_name; + } + + } else { + $accessory = $request->handleImages($accessory); + } session()->put(['redirect_option' => $request->get('redirect_option')]); // Was the accessory created? @@ -114,11 +125,12 @@ class AccessoriesController extends Controller $this->authorize('create', Accessory::class); $cloned = clone $accessory; + $accessory_to_clone = $accessory; $cloned->id = null; $cloned->deleted_at = ''; - $cloned->location_id = null; return view('accessories/edit') + ->with('cloned_model', $accessory_to_clone) ->with('item', $cloned); } diff --git a/app/Http/Controllers/AssetModelsController.php b/app/Http/Controllers/AssetModelsController.php index 0795588776..b2745a6e53 100755 --- a/app/Http/Controllers/AssetModelsController.php +++ b/app/Http/Controllers/AssetModelsController.php @@ -87,7 +87,20 @@ class AssetModelsController extends Controller $model->fieldset_id = $request->input('fieldset_id'); } - $model = $request->handleImages($model); + if ($request->has('use_cloned_image')) { + $cloned_model_img = AssetModel::select('image')->find($request->input('clone_image_from_id')); + if ($cloned_model_img) { + $new_image_name = 'clone-'.date('U').'-'.$cloned_model_img->image; + $new_image = 'models/'.$new_image_name; + Storage::disk('public')->copy('models/'.$cloned_model_img->image, $new_image); + $model->image = $new_image_name; + } + + } else { + $model = $request->handleImages($model); + } + + if ($model->save()) { if ($this->shouldAddDefaultValues($request->input())) { @@ -271,7 +284,7 @@ class AssetModelsController extends Controller ->with('depreciation_list', Helper::depreciationList()) ->with('item', $model) ->with('model_id', $model->id) - ->with('clone_model', $cloned_model); + ->with('cloned_model', $cloned_model); } diff --git a/app/Http/Controllers/Assets/AssetsController.php b/app/Http/Controllers/Assets/AssetsController.php index 654ba2615d..5fba9390fe 100755 --- a/app/Http/Controllers/Assets/AssetsController.php +++ b/app/Http/Controllers/Assets/AssetsController.php @@ -157,8 +157,16 @@ class AssetsController extends Controller $asset->location_id = $request->input('rtd_location_id', null); } - // Create the image (if one was chosen.) - if ($request->has('image')) { + if ($request->has('use_cloned_image')) { + $cloned_model_img = Asset::select('image')->find($request->input('clone_image_from_id')); + if ($cloned_model_img) { + $new_image_name = 'clone-'.date('U').'-'.$cloned_model_img->image; + $new_image = 'assets/'.$new_image_name; + Storage::disk('public')->copy('assets/'.$cloned_model_img->image, $new_image); + $asset->image = $new_image_name; + } + + } else { $asset = $request->handleImages($asset); } diff --git a/app/Http/Controllers/Consumables/ConsumablesController.php b/app/Http/Controllers/Consumables/ConsumablesController.php index dc0b7e4b3d..e08dfa0c5f 100644 --- a/app/Http/Controllers/Consumables/ConsumablesController.php +++ b/app/Http/Controllers/Consumables/ConsumablesController.php @@ -7,7 +7,7 @@ use App\Http\Controllers\Controller; use App\Http\Requests\ImageUploadRequest; use App\Models\Company; use App\Models\Consumable; -use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Validator; use Illuminate\Http\RedirectResponse; use \Illuminate\Contracts\View\View; @@ -81,11 +81,23 @@ class ConsumablesController extends Controller $consumable->purchase_date = $request->input('purchase_date'); $consumable->purchase_cost = $request->input('purchase_cost'); $consumable->qty = $request->input('qty'); - $consumable->created_by = auth()->id(); + $consumable->created_by = auth()->id(); $consumable->notes = $request->input('notes'); - $consumable = $request->handleImages($consumable); + if ($request->has('use_cloned_image')) { + $cloned_model_img = Consumable::select('image')->find($request->input('clone_image_from_id')); + if ($cloned_model_img) { + $new_image_name = 'clone-'.date('U').'-'.$cloned_model_img->image; + \Log::error($new_image_name); + $new_image = 'consumables/'.$new_image_name; + Storage::disk('public')->copy('consumables/'.$cloned_model_img->image, $new_image); + $consumable->image = $new_image_name; + } + + } else { + $consumable = $request->handleImages($consumable); + } session()->put(['redirect_option' => $request->get('redirect_option')]); @@ -213,9 +225,10 @@ class ConsumablesController extends Controller $consumable_to_close = $consumable; $consumable = clone $consumable_to_close; $consumable->id = null; - $consumable->image = null; $consumable->created_by = null; - return view('consumables/edit')->with('item', $consumable); + return view('consumables/edit') + ->with('cloned_model', $consumable_to_close) + ->with('item', $consumable); } } diff --git a/app/Http/Controllers/LocationsController.php b/app/Http/Controllers/LocationsController.php index da4e6a7e44..46eff73df7 100755 --- a/app/Http/Controllers/LocationsController.php +++ b/app/Http/Controllers/LocationsController.php @@ -96,7 +96,18 @@ class LocationsController extends Controller $location->company_id = $request->input('company_id'); } - $location = $request->handleImages($location); + if ($request->has('use_cloned_image')) { + $cloned_model_img = Location::select('image')->find($request->input('clone_image_from_id')); + if ($cloned_model_img) { + $new_image_name = 'clone-'.date('U').'-'.$cloned_model_img->image; + $new_image = 'locations/'.$new_image_name; + Storage::disk('public')->copy('locations/'.$cloned_model_img->image, $new_image); + $location->image = $new_image_name; + } + + } else { + $location = $request->handleImages($location); + } if ($location->save()) { return redirect()->route('locations.index')->with('success', trans('admin/locations/message.create.success')); @@ -275,9 +286,9 @@ class LocationsController extends Controller // unset these values $location->id = null; - $location->image = null; return view('locations/edit') + ->with('cloned_model', $location_to_clone) ->with('item', $location); } diff --git a/app/Http/Controllers/Users/UsersController.php b/app/Http/Controllers/Users/UsersController.php index 8221fc4bd8..2bfdf06d23 100755 --- a/app/Http/Controllers/Users/UsersController.php +++ b/app/Http/Controllers/Users/UsersController.php @@ -432,7 +432,7 @@ class UsersController extends Controller app('request')->request->set('permissions', $permissions); - $user_to_clone = User::with('assets', 'assets.model', 'consumables', 'accessories', 'licenses', 'userloc')->withTrashed()->find($user->id); + $user_to_clone = User::with('userloc')->withTrashed()->find($user->id); // Make sure they can view this particular user $this->authorize('view', $user_to_clone); @@ -447,6 +447,8 @@ class UsersController extends Controller $user->last_name = ''; $user->email = substr($user->email, ($pos = strpos($user->email, '@')) !== false ? $pos : 0); $user->id = null; + $user->username = null; + $user->avatar = null; // Get this user's groups $userGroups = $user_to_clone->groups()->pluck('name', 'id'); @@ -462,7 +464,7 @@ class UsersController extends Controller ->with('user', $user) ->with('groups', Group::pluck('name', 'id')) ->with('userGroups', $userGroups) - ->with('clone_user', $user_to_clone) + ->with('cloned_model', $user_to_clone) ->with('item', $user); } diff --git a/resources/lang/en-US/general.php b/resources/lang/en-US/general.php index 5ce85d9fc1..1e2e2665b7 100644 --- a/resources/lang/en-US/general.php +++ b/resources/lang/en-US/general.php @@ -598,6 +598,8 @@ return [ 'by' => 'By', 'version' => 'Version', 'build' => 'build', + 'use_cloned_image' => 'Clone image from original', + 'use_cloned_image_help' => 'You may clone the original image or you can upload a new one using the upload field below.', 'footer_credit' => 'Snipe-IT is open source software, made with love by @snipeitapp.com.', 'set_password' => 'Set a Password', diff --git a/resources/views/layouts/default.blade.php b/resources/views/layouts/default.blade.php index b7bdb2d2aa..95d1a67c24 100644 --- a/resources/views/layouts/default.blade.php +++ b/resources/views/layouts/default.blade.php @@ -1154,6 +1154,19 @@ dir="{{ Helper::determineLanguageDirection() }}"> $(function () { + // This handles the show/hide for cloned items + $('#use_cloned_image').click(function() { + if ($('#use_cloned_image').is(':checked')) { + $('#image_delete').prop('checked', false); + $('#image-upload').hide(); + $('#existing-image').show(); + } else { + $('#image-upload').show(); + $('#existing-image').hide(); + } + //$('#image-upload').hide(); + }); + // Invoke Bootstrap 3's tooltip $('[data-tooltip="true"]').tooltip({ container: 'body', diff --git a/resources/views/models/edit.blade.php b/resources/views/models/edit.blade.php index 9c72107ef8..b2e7e82686 100755 --- a/resources/views/models/edit.blade.php +++ b/resources/views/models/edit.blade.php @@ -9,7 +9,6 @@ {{-- Page content --}} @section('inputFields') - @include ('partials.forms.edit.name', ['translated_name' => trans('admin/models/table.name'), 'required' => 'true']) @include ('partials.forms.edit.category-select', ['translated_name' => trans('admin/categories/general.category_name'), 'fieldname' => 'category_id', 'required' => 'true', 'category_type' => 'asset']) @include ('partials.forms.edit.manufacturer-select', ['translated_name' => trans('general.manufacturer'), 'fieldname' => 'manufacturer_id']) @@ -43,4 +42,4 @@ @include ('partials.forms.edit.image-upload', ['image_path' => app('models_upload_path')]) -@stop \ No newline at end of file +@stop diff --git a/resources/views/partials/forms/edit/image-upload.blade.php b/resources/views/partials/forms/edit/image-upload.blade.php index 0accf2f59d..47a1411d12 100644 --- a/resources/views/partials/forms/edit/image-upload.blade.php +++ b/resources/views/partials/forms/edit/image-upload.blade.php @@ -1,27 +1,45 @@ - @if (isset($image_path)) @if (isset($item) && ($item->{($fieldname ?? 'image')}))
+ {{ trans('general.use_cloned_image_help') }} +
+ + {!! $errors->first('use_cloned_image', ':message') !!} + @else + + + @endif +{{ trans('general.image_filetypes_help', ['size' => Helper::file_upload_max_size_readable()]) }} {{ $help_text ?? '' }}
- - {!! $errors->first('image', '') !!}