diff --git a/app/Http/Controllers/Api/AccessoriesController.php b/app/Http/Controllers/Api/AccessoriesController.php index e7a574356..7096f388d 100644 --- a/app/Http/Controllers/Api/AccessoriesController.php +++ b/app/Http/Controllers/Api/AccessoriesController.php @@ -13,6 +13,7 @@ use Auth; use Carbon\Carbon; use DB; use Illuminate\Http\Request; +use App\Http\Requests\ImageUploadRequest; class AccessoriesController extends Controller { @@ -85,10 +86,10 @@ class AccessoriesController extends Controller * * @author [A. Gianotto] [] * @since [v4.0] - * @param \Illuminate\Http\Request $request + * @param \App\Http\Requests\ImageUploadRequest $request * @return \Illuminate\Http\Response */ - public function store(Request $request) + public function store(ImageUploadRequest $request) { $this->authorize('create', Accessory::class); $accessory = new Accessory; @@ -178,15 +179,16 @@ class AccessoriesController extends Controller * * @author [A. Gianotto] [] * @since [v4.0] - * @param \Illuminate\Http\Request $request + * @param \App\Http\Requests\ImageUploadRequest $request * @param int $id * @return \Illuminate\Http\Response */ - public function update(Request $request, $id) + public function update(ImageUploadRequest $request, $id) { $this->authorize('update', Accessory::class); $accessory = Accessory::findOrFail($id); $accessory->fill($request->all()); + $accessory = $request->handleImages($accessory); if ($accessory->save()) { return response()->json(Helper::formatStandardApiResponse('success', $accessory, trans('admin/accessories/message.update.success'))); diff --git a/app/Http/Controllers/Api/AssetModelsController.php b/app/Http/Controllers/Api/AssetModelsController.php index bf1a723e1..82e792d55 100644 --- a/app/Http/Controllers/Api/AssetModelsController.php +++ b/app/Http/Controllers/Api/AssetModelsController.php @@ -10,6 +10,7 @@ use App\Http\Transformers\SelectlistTransformer; use App\Models\Asset; use App\Models\AssetModel; use Illuminate\Http\Request; +use App\Http\Requests\ImageUploadRequest; use Illuminate\Support\Facades\Storage; /** @@ -106,14 +107,15 @@ class AssetModelsController extends Controller * * @author [A. Gianotto] [] * @since [v4.0] - * @param \Illuminate\Http\Request $request + * @param \App\Http\Requests\ImageUploadRequest $request * @return \Illuminate\Http\Response */ - public function store(Request $request) + public function store(ImageUploadRequest $request) { $this->authorize('create', AssetModel::class); $assetmodel = new AssetModel; $assetmodel->fill($request->all()); + $assetmodel = $request->handleImages($assetmodel); if ($assetmodel->save()) { return response()->json(Helper::formatStandardApiResponse('success', $assetmodel, trans('admin/models/message.create.success'))); @@ -159,16 +161,17 @@ class AssetModelsController extends Controller * * @author [A. Gianotto] [] * @since [v4.0] - * @param \Illuminate\Http\Request $request + * @param \App\Http\Requests\ImageUploadRequest $request * @param int $id * @return \Illuminate\Http\Response */ - public function update(Request $request, $id) + public function update(ImageUploadRequest $request, $id) { $this->authorize('update', AssetModel::class); $assetmodel = AssetModel::findOrFail($id); $assetmodel->fill($request->all()); - + $assetmodel = $request->handleImages($assetmodel); + /** * Allow custom_fieldset_id to override and populate fieldset_id. * This is stupid, but required for legacy API support. diff --git a/app/Http/Controllers/Api/AssetsController.php b/app/Http/Controllers/Api/AssetsController.php index a3c2bcd2c..0cfef5eb9 100644 --- a/app/Http/Controllers/Api/AssetsController.php +++ b/app/Http/Controllers/Api/AssetsController.php @@ -21,6 +21,7 @@ use Carbon\Carbon; use DB; use Illuminate\Http\Request; use Illuminate\Support\Facades\Gate; +use App\Http\Requests\ImageUploadRequest; use Input; use Paginator; use Slack; @@ -404,11 +405,11 @@ class AssetsController extends Controller * Accepts a POST request to create a new asset * * @author [A. Gianotto] [] - * @param Request $request + * @param \App\Http\Requests\ImageUploadRequest $request * @since [v4.0] * @return JsonResponse */ - public function store(Request $request) + public function store(ImageUploadRequest $request) { $this->authorize('create', Asset::class); @@ -435,22 +436,16 @@ class AssetsController extends Controller $asset->requestable = $request->get('requestable', 0); $asset->rtd_location_id = $request->get('rtd_location_id', null); $asset->location_id = $request->get('rtd_location_id', null); + + /** + * this is here just legacy reasons. Api\AssetController + * used image_source once to allow encoded image uploads. + */ + if ($request->has('image_source')) { + $request->offsetSet('image', $request->offsetGet('image_source')); + } - if ($request->has('image_source') && $request->input('image_source') != '') { - $saved_image_path = Helper::processUploadedImage( - $request->input('image_source'), 'uploads/assets/' - ); - - if (! $saved_image_path) { - return response()->json(Helper::formatStandardApiResponse( - 'error', - null, - trans('admin/hardware/message.create.error') - ), 200); - } - - $asset->image = $saved_image_path; - } + $asset = $request->handleImages($asset); // Update custom fields in the database. // Validation for these fields is handled through the AssetRequest form request @@ -513,11 +508,11 @@ class AssetsController extends Controller * Accepts a POST request to update an asset * * @author [A. Gianotto] [] - * @param Request $request + * @param \App\Http\Requests\ImageUploadRequest $request * @since [v4.0] * @return JsonResponse */ - public function update(Request $request, $id) + public function update(ImageUploadRequest $request, $id) { $this->authorize('update', Asset::class); @@ -534,28 +529,16 @@ class AssetsController extends Controller ($request->filled('rtd_location_id')) ? $asset->location_id = $request->get('rtd_location_id') : null; - if ($request->filled('image_source')) { - if ($request->input('image_source') == '') { - ($request->filled('rtd_location_id')) ? - $asset->location_id = $request->get('rtd_location_id') : null; - $asset->image = null; - } else { - $saved_image_path = Helper::processUploadedImage( - $request->input('image_source'), 'uploads/assets/' - ); - - if (! $saved_image_path) { - return response()->json(Helper::formatStandardApiResponse( - 'error', - null, - trans('admin/hardware/message.update.error') - ), 200); - } - - $asset->image = $saved_image_path; - } - } + /** + * this is here just legacy reasons. Api\AssetController + * used image_source once to allow encoded image uploads. + */ + if ($request->has('image_source')) { + $request->offsetSet('image', $request->offsetGet('image_source')); + } + $asset = $request->handleImages($asset); + // Update custom fields if (($model = AssetModel::find($asset->model_id)) && (isset($model->fieldset))) { foreach ($model->fieldset->fields as $field) { diff --git a/app/Http/Controllers/Api/CategoriesController.php b/app/Http/Controllers/Api/CategoriesController.php index 8a60f343b..8c8bb317e 100644 --- a/app/Http/Controllers/Api/CategoriesController.php +++ b/app/Http/Controllers/Api/CategoriesController.php @@ -8,6 +8,7 @@ use App\Http\Transformers\CategoriesTransformer; use App\Http\Transformers\SelectlistTransformer; use App\Models\Category; use Illuminate\Http\Request; +use App\Http\Requests\ImageUploadRequest; use Illuminate\Support\Facades\Storage; class CategoriesController extends Controller @@ -53,14 +54,15 @@ class CategoriesController extends Controller * * @author [A. Gianotto] [] * @since [v4.0] - * @param \Illuminate\Http\Request $request + * @param \App\Http\Requests\ImageUploadRequest $request * @return \Illuminate\Http\Response */ - public function store(Request $request) + public function store(ImageUploadRequest $request) { $this->authorize('create', Category::class); $category = new Category; $category->fill($request->all()); + $category = $request->handleImages($category); if ($category->save()) { return response()->json(Helper::formatStandardApiResponse('success', $category, trans('admin/categories/message.create.success'))); @@ -90,15 +92,16 @@ class CategoriesController extends Controller * * @author [A. Gianotto] [] * @since [v4.0] - * @param \Illuminate\Http\Request $request + * @param \App\Http\Requests\ImageUploadRequest $request * @param int $id * @return \Illuminate\Http\Response */ - public function update(Request $request, $id) + public function update(ImageUploadRequest $request, $id) { $this->authorize('update', Category::class); $category = Category::findOrFail($id); $category->fill($request->all()); + $category = $request->handleImages($category); if ($category->save()) { return response()->json(Helper::formatStandardApiResponse('success', $category, trans('admin/categories/message.update.success'))); diff --git a/app/Http/Controllers/Api/CompaniesController.php b/app/Http/Controllers/Api/CompaniesController.php index 51e1681c4..6e53ad068 100644 --- a/app/Http/Controllers/Api/CompaniesController.php +++ b/app/Http/Controllers/Api/CompaniesController.php @@ -8,6 +8,7 @@ use App\Http\Transformers\CompaniesTransformer; use App\Http\Transformers\SelectlistTransformer; use App\Models\Company; use Illuminate\Http\Request; +use App\Http\Requests\ImageUploadRequest; use Illuminate\Support\Facades\Storage; class CompaniesController extends Controller @@ -64,15 +65,16 @@ class CompaniesController extends Controller * * @author [A. Gianotto] [] * @since [v4.0] - * @param \Illuminate\Http\Request $request + * @param \App\Http\Requests\ImageUploadRequest $request * @return \Illuminate\Http\Response */ - public function store(Request $request) + public function store(ImageUploadRequest $request) { $this->authorize('create', Company::class); $company = new Company; $company->fill($request->all()); - + $company = $request->handleImages($company); + if ($company->save()) { return response()->json(Helper::formatStandardApiResponse('success', (new CompaniesTransformer)->transformCompany($company), trans('admin/companies/message.create.success'))); } @@ -102,15 +104,16 @@ class CompaniesController extends Controller * * @author [A. Gianotto] [] * @since [v4.0] - * @param \Illuminate\Http\Request $request + * @param \App\Http\Requests\ImageUploadRequest $request * @param int $id * @return \Illuminate\Http\Response */ - public function update(Request $request, $id) + public function update(ImageUploadRequest $request, $id) { $this->authorize('update', Company::class); $company = Company::findOrFail($id); $company->fill($request->all()); + $company = $request->handleImages($company); if ($company->save()) { return response() diff --git a/app/Http/Controllers/Api/ComponentsController.php b/app/Http/Controllers/Api/ComponentsController.php index ccd73eb49..493ef1e09 100644 --- a/app/Http/Controllers/Api/ComponentsController.php +++ b/app/Http/Controllers/Api/ComponentsController.php @@ -8,6 +8,7 @@ use App\Http\Transformers\ComponentsTransformer; use App\Models\Company; use App\Models\Component; use Illuminate\Http\Request; +use App\Http\Requests\ImageUploadRequest; class ComponentsController extends Controller { @@ -78,14 +79,15 @@ class ComponentsController extends Controller * * @author [A. Gianotto] [] * @since [v4.0] - * @param \Illuminate\Http\Request $request + * @param \App\Http\Requests\ImageUploadRequest $request * @return \Illuminate\Http\Response */ - public function store(Request $request) + public function store(ImageUploadRequest $request) { $this->authorize('create', Component::class); $component = new Component; $component->fill($request->all()); + $component = $request->handleImages($component); if ($component->save()) { return response()->json(Helper::formatStandardApiResponse('success', $component, trans('admin/components/message.create.success'))); @@ -116,15 +118,17 @@ class ComponentsController extends Controller * * @author [A. Gianotto] [] * @since [v4.0] - * @param \Illuminate\Http\Request $request + * @param \App\Http\Requests\ImageUploadRequest $request * @param int $id * @return \Illuminate\Http\Response */ - public function update(Request $request, $id) + public function update(ImageUploadRequest $request, $id) { $this->authorize('update', Component::class); $component = Component::findOrFail($id); $component->fill($request->all()); + $component = $request->handleImages($component); + if ($component->save()) { return response()->json(Helper::formatStandardApiResponse('success', $component, trans('admin/components/message.update.success'))); diff --git a/app/Http/Controllers/Api/ConsumablesController.php b/app/Http/Controllers/Api/ConsumablesController.php index e05277f26..7089905fb 100644 --- a/app/Http/Controllers/Api/ConsumablesController.php +++ b/app/Http/Controllers/Api/ConsumablesController.php @@ -10,6 +10,7 @@ use App\Models\Company; use App\Models\Consumable; use App\Models\User; use Illuminate\Http\Request; +use App\Http\Requests\ImageUploadRequest; class ConsumablesController extends Controller { @@ -85,14 +86,15 @@ class ConsumablesController extends Controller * * @author [A. Gianotto] [] * @since [v4.0] - * @param \Illuminate\Http\Request $request + * @param \App\Http\Requests\ImageUploadRequest $request * @return \Illuminate\Http\Response */ - public function store(Request $request) + public function store(ImageUploadRequest $request) { $this->authorize('create', Consumable::class); $consumable = new Consumable; $consumable->fill($request->all()); + $consumable = $request->handleImages($consumable); if ($consumable->save()) { return response()->json(Helper::formatStandardApiResponse('success', $consumable, trans('admin/consumables/message.create.success'))); @@ -121,16 +123,17 @@ class ConsumablesController extends Controller * * @author [A. Gianotto] [] * @since [v4.0] - * @param \Illuminate\Http\Request $request + * @param \App\Http\Requests\ImageUploadRequest $request * @param int $id * @return \Illuminate\Http\Response */ - public function update(Request $request, $id) + public function update(ImageUploadRequest $request, $id) { $this->authorize('update', Consumable::class); $consumable = Consumable::findOrFail($id); $consumable->fill($request->all()); - + $consumable = $request->handleImages($consumable); + if ($consumable->save()) { return response()->json(Helper::formatStandardApiResponse('success', $consumable, trans('admin/consumables/message.update.success'))); } diff --git a/app/Http/Controllers/Api/DepartmentsController.php b/app/Http/Controllers/Api/DepartmentsController.php index 872da9183..21c2ac114 100644 --- a/app/Http/Controllers/Api/DepartmentsController.php +++ b/app/Http/Controllers/Api/DepartmentsController.php @@ -9,6 +9,7 @@ use App\Http\Transformers\SelectlistTransformer; use App\Models\Department; use Auth; use Illuminate\Http\Request; +use App\Http\Requests\ImageUploadRequest; use Illuminate\Support\Facades\Storage; class DepartmentsController extends Controller @@ -73,14 +74,16 @@ class DepartmentsController extends Controller * * @author [A. Gianotto] [] * @since [v4.0] - * @param \Illuminate\Http\Request $request + * @param \App\Http\Requests\ImageUploadRequest $request * @return \Illuminate\Http\Response */ - public function store(Request $request) + public function store(ImageUploadRequest $request) { $this->authorize('create', Department::class); $department = new Department; $department->fill($request->all()); + $department = $request->handleImages($department); + $department->user_id = Auth::user()->id; $department->manager_id = ($request->filled('manager_id') ? $request->input('manager_id') : null); @@ -112,15 +115,16 @@ class DepartmentsController extends Controller * * @author [A. Gianotto] [] * @since [v5.0] - * @param \Illuminate\Http\Request $request + * @param \App\Http\Requests\ImageUploadRequest $request * @param int $id * @return \Illuminate\Http\Response */ - public function update(Request $request, $id) + public function update(ImageUploadRequest $request, $id) { $this->authorize('update', Department::class); $department = Department::findOrFail($id); $department->fill($request->all()); + $department = $request->handleImages($department); if ($department->save()) { return response()->json(Helper::formatStandardApiResponse('success', $department, trans('admin/departments/message.update.success'))); diff --git a/app/Http/Controllers/Api/LocationsController.php b/app/Http/Controllers/Api/LocationsController.php index 01c8040c6..2655113c2 100644 --- a/app/Http/Controllers/Api/LocationsController.php +++ b/app/Http/Controllers/Api/LocationsController.php @@ -8,6 +8,7 @@ use App\Http\Transformers\LocationsTransformer; use App\Http\Transformers\SelectlistTransformer; use App\Models\Location; use Illuminate\Http\Request; +use App\Http\Requests\ImageUploadRequest; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Collection; @@ -83,14 +84,15 @@ class LocationsController extends Controller * * @author [A. Gianotto] [] * @since [v4.0] - * @param \Illuminate\Http\Request $request + * @param \App\Http\Requests\ImageUploadRequest $request * @return \Illuminate\Http\Response */ - public function store(Request $request) + public function store(ImageUploadRequest $request) { $this->authorize('create', Location::class); $location = new Location; $location->fill($request->all()); + $location = $request->handleImages($location); if ($location->save()) { return response()->json(Helper::formatStandardApiResponse('success', (new LocationsTransformer)->transformLocation($location), trans('admin/locations/message.create.success'))); @@ -139,16 +141,17 @@ class LocationsController extends Controller * * @author [A. Gianotto] [] * @since [v4.0] - * @param \Illuminate\Http\Request $request + * @param \App\Http\Requests\ImageUploadRequest $request * @param int $id * @return \Illuminate\Http\JsonResponse */ - public function update(Request $request, $id) + public function update(ImageUploadRequest $request, $id) { $this->authorize('update', Location::class); $location = Location::findOrFail($id); $location->fill($request->all()); + $location = $request->handleImages($location); if ($location->isValid()) { $location->save(); diff --git a/app/Http/Controllers/Api/ManufacturersController.php b/app/Http/Controllers/Api/ManufacturersController.php index 51dc2c496..5392c1d21 100644 --- a/app/Http/Controllers/Api/ManufacturersController.php +++ b/app/Http/Controllers/Api/ManufacturersController.php @@ -8,6 +8,7 @@ use App\Http\Transformers\ManufacturersTransformer; use App\Http\Transformers\SelectlistTransformer; use App\Models\Manufacturer; use Illuminate\Http\Request; +use App\Http\Requests\ImageUploadRequest; use Illuminate\Support\Facades\Storage; class ManufacturersController extends Controller @@ -58,14 +59,15 @@ class ManufacturersController extends Controller * * @author [A. Gianotto] [] * @since [v4.0] - * @param \Illuminate\Http\Request $request + * @param \App\Http\Requests\ImageUploadRequest $request * @return \Illuminate\Http\Response */ - public function store(Request $request) + public function store(ImageUploadRequest $request) { $this->authorize('create', Manufacturer::class); $manufacturer = new Manufacturer; $manufacturer->fill($request->all()); + $manufacturer = $request->handleImages($manufacturer); if ($manufacturer->save()) { return response()->json(Helper::formatStandardApiResponse('success', $manufacturer, trans('admin/manufacturers/message.create.success'))); @@ -95,15 +97,16 @@ class ManufacturersController extends Controller * * @author [A. Gianotto] [] * @since [v4.0] - * @param \Illuminate\Http\Request $request + * @param \App\Http\Requests\ImageUploadRequest $request * @param int $id * @return \Illuminate\Http\Response */ - public function update(Request $request, $id) + public function update(ImageUploadRequest $request, $id) { $this->authorize('update', Manufacturer::class); $manufacturer = Manufacturer::findOrFail($id); $manufacturer->fill($request->all()); + $manufacturer = $request->handleImages($manufacturer); if ($manufacturer->save()) { return response()->json(Helper::formatStandardApiResponse('success', $manufacturer, trans('admin/manufacturers/message.update.success'))); diff --git a/app/Http/Controllers/Api/SuppliersController.php b/app/Http/Controllers/Api/SuppliersController.php index 6197d630b..f1dc550ca 100644 --- a/app/Http/Controllers/Api/SuppliersController.php +++ b/app/Http/Controllers/Api/SuppliersController.php @@ -8,6 +8,7 @@ use App\Http\Transformers\SelectlistTransformer; use App\Http\Transformers\SuppliersTransformer; use App\Models\Supplier; use Illuminate\Http\Request; +use App\http\Requests\ImageUploadRequest; use Illuminate\Support\Facades\Storage; class SuppliersController extends Controller @@ -54,14 +55,15 @@ class SuppliersController extends Controller * * @author [A. Gianotto] [] * @since [v4.0] - * @param \Illuminate\Http\Request $request + * @param \App\Http\Requests\ImageUploadRequest $request * @return \Illuminate\Http\Response */ - public function store(Request $request) + public function store(ImageUploadRequest $request) { $this->authorize('create', Supplier::class); $supplier = new Supplier; $supplier->fill($request->all()); + $supplier = $request->handleImages($supplier); if ($supplier->save()) { return response()->json(Helper::formatStandardApiResponse('success', $supplier, trans('admin/suppliers/message.create.success'))); @@ -91,15 +93,16 @@ class SuppliersController extends Controller * * @author [A. Gianotto] [] * @since [v4.0] - * @param \Illuminate\Http\Request $request + * @param \App\Http\Requests\ImageUploadRequest $request * @param int $id * @return \Illuminate\Http\Response */ - public function update(Request $request, $id) + public function update(ImageUploadRequest $request, $id) { $this->authorize('update', Supplier::class); $supplier = Supplier::findOrFail($id); $supplier->fill($request->all()); + $supplier = $request->handleImages($supplier); if ($supplier->save()) { return response()->json(Helper::formatStandardApiResponse('success', $supplier, trans('admin/suppliers/message.update.success'))); diff --git a/app/Http/Controllers/Api/UsersController.php b/app/Http/Controllers/Api/UsersController.php index 599f7ded5..ff7d9ef86 100644 --- a/app/Http/Controllers/Api/UsersController.php +++ b/app/Http/Controllers/Api/UsersController.php @@ -16,6 +16,7 @@ use App\Models\License; use App\Models\User; use Auth; use Illuminate\Http\Request; +use App\Http\Requests\ImageUploadRequest; use Illuminate\Support\Facades\Storage; class UsersController extends Controller @@ -228,6 +229,8 @@ class UsersController extends Controller $tmp_pass = substr(str_shuffle('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'), 0, 20); $user->password = bcrypt($request->get('password', $tmp_pass)); + app('App\Http\Requests\ImageUploadRequest')->handleImages($user, 600, 'image', 'avatars', 'avatar'); + if ($user->save()) { if ($request->filled('groups')) { $user->groups()->sync($request->input('groups')); @@ -280,7 +283,7 @@ class UsersController extends Controller } $user->fill($request->all()); - + if ($user->id == $request->input('manager_id')) { return response()->json(Helper::formatStandardApiResponse('error', null, 'You cannot be your own manager')); } @@ -306,6 +309,9 @@ class UsersController extends Controller Asset::where('assigned_type', User::class) ->where('assigned_to', $user->id)->update(['location_id' => $request->input('location_id', null)]); + + app('App\Http\Requests\ImageUploadRequest')->handleImages($user, 600, 'image', 'avatars', 'avatar'); + if ($user->save()) { // Sync group memberships: diff --git a/app/Http/Requests/ImageUploadRequest.php b/app/Http/Requests/ImageUploadRequest.php index 0a25ad733..3bf922722 100644 --- a/app/Http/Requests/ImageUploadRequest.php +++ b/app/Http/Requests/ImageUploadRequest.php @@ -5,10 +5,14 @@ namespace App\Http\Requests; use App\Models\SnipeModel; use enshrined\svgSanitize\Sanitizer; use Intervention\Image\Facades\Image; +use App\Http\Traits\ConvertsBase64ToFiles; +use Illuminate\Http\UploadedFile; use Storage; class ImageUploadRequest extends Request { + use ConvertsBase64ToFiles; + /** * Determine if the user is authorized to make this request. * @@ -26,16 +30,32 @@ class ImageUploadRequest extends Request */ public function rules() { - return [ - 'image' => 'mimes:png,gif,jpg,jpeg,svg,bmp,svg+xml,webp', - 'avatar' => 'mimes:png,gif,jpg,jpeg,svg,bmp,svg+xml,webp', - ]; + + return [ + 'image' => 'mimes:png,gif,jpg,jpeg,svg,bmp,svg+xml,webp', + 'avatar' => 'mimes:png,gif,jpg,jpeg,svg,bmp,svg+xml,webp', + ]; } public function response(array $errors) { return $this->redirector->back()->withInput()->withErrors($errors, $this->errorBag); } + + /** + * Fields that should be traited from base64 to files + */ + protected function base64FileKeys(): array + { + /** + * image_source is here just legacy reasons. Api\AssetController + * had it once to allow encoded image uploads. + */ + return [ + 'image' => 'auto', + 'image_source' => 'auto' + ]; + } /** * Handle and store any images attached to request @@ -74,13 +94,23 @@ class ImageUploadRequest extends Request \Log::debug('Type is: '.$type); \Log::debug('Form fieldname is: '.$form_fieldname); \Log::debug('DB fieldname is: '.$use_db_field); - \Log::debug('Trying to upload to '.$path); - - \Log::debug($this->file()); - - if ($this->hasFile($form_fieldname)) { - if (! config('app.lock_passwords')) { + \Log::debug('Trying to upload to '. $path); + + // 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); + } else { + if ($this->hasFile($form_fieldname)) { $image = $this->file($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; @@ -150,4 +180,5 @@ class ImageUploadRequest extends Request return $item; } + } diff --git a/app/Http/Traits/ConvertsBase64ToFiles.php b/app/Http/Traits/ConvertsBase64ToFiles.php new file mode 100644 index 000000000..aed8fc0df --- /dev/null +++ b/app/Http/Traits/ConvertsBase64ToFiles.php @@ -0,0 +1,80 @@ +base64FileKeys()); + + Collection::make($flattened)->each(function ($filename, $key) { + rescue(function () use ($key, $filename) { + // dont process plain files + if ( $this->file($key)){ + return; + } + + $base64Contents = $this->input($key); + + if (!$base64Contents) { + return; + } + + // autogenerate filenames + if ($filename == 'auto'){ + $header = explode(';', $base64Contents, 2)[0]; + // Grab the image type from the header while we're at it. + $filename = $key . '.' . substr($header, strpos($header, '/')+1); + } + + // Generate a temporary path to store the Base64 contents + $tempFilePath = tempnam(sys_get_temp_dir(), $filename); + + // Store the contents using a stream, or by decoding manually + if (Str::startsWith($base64Contents, 'data:') && count(explode(',', $base64Contents)) > 1) { + $source = fopen($base64Contents, 'r'); + $destination = fopen($tempFilePath, 'w'); + + stream_copy_to_stream($source, $destination); + + fclose($source); + fclose($destination); + } else { + file_put_contents($tempFilePath, base64_decode($base64Contents, true)); + } + + $uploadedFile = new UploadedFile($tempFilePath, $filename, null, null, true); + + \Log::debug("Trait: uploadedfile ". $tempFilePath); + $this->offsetUnset($key); + \Log::debug("Trait: encoded field \"$key\" removed" ); + + //Inserting new file to $this-files does not work so have to deal this after + $this->offsetSet($key,$uploadedFile); + \Log::debug("Trait: field \"$key\" inserted as UplodedFile" ); + + }, null, false); + }); + } +} +/** + * Loosely based on idea https://github.com/protonemedia/laravel-mixins/tree/master/src/Request + * */ \ No newline at end of file