From 8bbbb06c5e6605a21566529958e5b2ecebd1a2dc Mon Sep 17 00:00:00 2001 From: Petri Asikainen Date: Wed, 23 Jun 2021 11:22:41 +0300 Subject: [PATCH 01/32] testing image upload via api --- app/Http/Controllers/Api/AccessoriesController.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/Api/AccessoriesController.php b/app/Http/Controllers/Api/AccessoriesController.php index e7a574356..ed0f44992 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,11 +179,11 @@ 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); From f6766c5f237bb32ab62383df02788e8da598ea3c Mon Sep 17 00:00:00 2001 From: Petri Asikainen Date: Tue, 29 Jun 2021 12:25:47 +0300 Subject: [PATCH 02/32] Support images and multipart requests --- app/Http/Controllers/Api/AccessoriesController.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Api/AccessoriesController.php b/app/Http/Controllers/Api/AccessoriesController.php index ed0f44992..7096f388d 100644 --- a/app/Http/Controllers/Api/AccessoriesController.php +++ b/app/Http/Controllers/Api/AccessoriesController.php @@ -86,7 +86,7 @@ class AccessoriesController extends Controller * * @author [A. Gianotto] [] * @since [v4.0] - * @param App\Http\Requests\ImageUploadRequest $request + * @param \App\Http\Requests\ImageUploadRequest $request * @return \Illuminate\Http\Response */ public function store(ImageUploadRequest $request) @@ -179,7 +179,7 @@ class AccessoriesController extends Controller * * @author [A. Gianotto] [] * @since [v4.0] - * @param App\Http\Requests\ImageUploadRequest $request + * @param \App\Http\Requests\ImageUploadRequest $request * @param int $id * @return \Illuminate\Http\Response */ @@ -188,6 +188,7 @@ class AccessoriesController extends Controller $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'))); From b4380c80129d5963df07f5345fea4d9b06d7ac62 Mon Sep 17 00:00:00 2001 From: Petri Asikainen Date: Tue, 29 Jun 2021 12:26:15 +0300 Subject: [PATCH 03/32] Support images and multipart requests --- app/Http/Controllers/Api/AssetModelsController.php | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) 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. From 5081ca35122fce3d262e80e030c1747f1704e0d0 Mon Sep 17 00:00:00 2001 From: Petri Asikainen Date: Tue, 29 Jun 2021 12:26:24 +0300 Subject: [PATCH 04/32] Support images and multipart requests --- app/Http/Controllers/Api/AssetsController.php | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/Api/AssetsController.php b/app/Http/Controllers/Api/AssetsController.php index a3c2bcd2c..1f6d47eeb 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); @@ -452,6 +453,8 @@ class AssetsController extends Controller $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 $model = AssetModel::find($request->get('model_id')); @@ -513,11 +516,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); @@ -556,6 +559,8 @@ class AssetsController extends Controller } } + $asset = $request->handleImages($asset); + // Update custom fields if (($model = AssetModel::find($asset->model_id)) && (isset($model->fieldset))) { foreach ($model->fieldset->fields as $field) { From 60f13c8d79081a7cb6678670e684663f5a8614a1 Mon Sep 17 00:00:00 2001 From: Petri Asikainen Date: Tue, 29 Jun 2021 12:26:45 +0300 Subject: [PATCH 05/32] Support images and multipart requests --- app/Http/Controllers/Api/CategoriesController.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) 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'))); From bb269e0e5fb6c7f50da37ff21798cdc5aa274b24 Mon Sep 17 00:00:00 2001 From: Petri Asikainen Date: Tue, 29 Jun 2021 12:26:59 +0300 Subject: [PATCH 06/32] Support images and multipart requests --- app/Http/Controllers/Api/CompaniesController.php | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) 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() From e95b15d55315a087f235e139b965c8ff6547677d Mon Sep 17 00:00:00 2001 From: Petri Asikainen Date: Tue, 29 Jun 2021 12:27:08 +0300 Subject: [PATCH 07/32] Support images and multipart requests --- app/Http/Controllers/Api/ComponentsController.php | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) 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'))); From 0e7af808061f5745ad562eedf1cbad10f8efa4c4 Mon Sep 17 00:00:00 2001 From: Petri Asikainen Date: Tue, 29 Jun 2021 12:27:18 +0300 Subject: [PATCH 08/32] Support images and multipart requests --- app/Http/Controllers/Api/ConsumablesController.php | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) 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'))); } From 64c8767e8119343722b9e33fbe498c37a6e8a696 Mon Sep 17 00:00:00 2001 From: Petri Asikainen Date: Tue, 29 Jun 2021 12:28:32 +0300 Subject: [PATCH 09/32] Support images and multipart requests --- app/Http/Controllers/Api/DepartmentsController.php | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/Api/DepartmentsController.php b/app/Http/Controllers/Api/DepartmentsController.php index 872da9183..f7a709a1d 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'))); From 6a21660c1424a2f2035b5cceb714d7abdf6c2373 Mon Sep 17 00:00:00 2001 From: Petri Asikainen Date: Tue, 29 Jun 2021 12:28:42 +0300 Subject: [PATCH 10/32] Support images and multipart requests --- app/Http/Controllers/Api/LocationsController.php | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/Api/LocationsController.php b/app/Http/Controllers/Api/LocationsController.php index 01c8040c6..f2aa645db 100644 --- a/app/Http/Controllers/Api/LocationsController.php +++ b/app/Http/Controllers/Api/LocationsController.php @@ -2,6 +2,12 @@ namespace App\Http\Controllers\Api; +<<<<<<< HEAD +======= +use Illuminate\Http\Request; +use App\Http\Requests\ImageUploadRequest; +use App\Http\Controllers\Controller; +>>>>>>> f9da83bc4 (Support images and multipart requests) use App\Helpers\Helper; use App\Http\Controllers\Controller; use App\Http\Transformers\LocationsTransformer; @@ -83,14 +89,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 +146,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(); From f1b8ce0a1b15b4dec905e9ec028ddbea508d29ed Mon Sep 17 00:00:00 2001 From: Petri Asikainen Date: Tue, 29 Jun 2021 12:28:52 +0300 Subject: [PATCH 11/32] Support images and multipart requests --- app/Http/Controllers/Api/ManufacturersController.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/Api/ManufacturersController.php b/app/Http/Controllers/Api/ManufacturersController.php index 51dc2c496..6fb801559 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'))); From 2f3501bdc23d122e718d7400be302893d82af8c7 Mon Sep 17 00:00:00 2001 From: Petri Asikainen Date: Tue, 29 Jun 2021 12:29:07 +0300 Subject: [PATCH 12/32] Support images and multipart requests --- app/Http/Controllers/Api/SuppliersController.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) 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'))); From 4191dd39ea36ff0f7db8c10eb6d6e8d98b2f8119 Mon Sep 17 00:00:00 2001 From: Petri Asikainen Date: Tue, 29 Jun 2021 12:29:17 +0300 Subject: [PATCH 13/32] Support images and multipart requests --- app/Http/Controllers/Api/UsersController.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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: From 91af3f266188f40407f5051cfff279039b614547 Mon Sep 17 00:00:00 2001 From: Petri Asikainen Date: Tue, 29 Jun 2021 14:25:20 +0300 Subject: [PATCH 14/32] Support images and multipart requests --- app/Http/Controllers/Api/DepartmentsController.php | 2 +- app/Http/Controllers/Api/ManufacturersController.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Api/DepartmentsController.php b/app/Http/Controllers/Api/DepartmentsController.php index f7a709a1d..11b81abf2 100644 --- a/app/Http/Controllers/Api/DepartmentsController.php +++ b/app/Http/Controllers/Api/DepartmentsController.php @@ -82,7 +82,7 @@ class DepartmentsController extends Controller $this->authorize('create', Department::class); $department = new Department; $department->fill($request->all()); - $department = $request->handleImages($department) + $department = $request->handleImages($department); $department->user_id = Auth::user()->id; $department->manager_id = ($request->filled('manager_id') ? $request->input('manager_id') : null); diff --git a/app/Http/Controllers/Api/ManufacturersController.php b/app/Http/Controllers/Api/ManufacturersController.php index 6fb801559..5392c1d21 100644 --- a/app/Http/Controllers/Api/ManufacturersController.php +++ b/app/Http/Controllers/Api/ManufacturersController.php @@ -106,7 +106,7 @@ class ManufacturersController extends Controller $this->authorize('update', Manufacturer::class); $manufacturer = Manufacturer::findOrFail($id); $manufacturer->fill($request->all()); - $manufacturer = $request->handleImages($manufacturer) + $manufacturer = $request->handleImages($manufacturer); if ($manufacturer->save()) { return response()->json(Helper::formatStandardApiResponse('success', $manufacturer, trans('admin/manufacturers/message.update.success'))); From 6173aaa25c23db9926b6508b35ca926967a3b7d6 Mon Sep 17 00:00:00 2001 From: Petri Asikainen Date: Wed, 30 Jun 2021 06:36:12 +0300 Subject: [PATCH 15/32] fixed capitalization --- app/Http/Controllers/Api/DepartmentsController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Api/DepartmentsController.php b/app/Http/Controllers/Api/DepartmentsController.php index 11b81abf2..ad240ec6b 100644 --- a/app/Http/Controllers/Api/DepartmentsController.php +++ b/app/Http/Controllers/Api/DepartmentsController.php @@ -9,7 +9,7 @@ use App\Http\Transformers\SelectlistTransformer; use App\Models\Department; use Auth; use Illuminate\Http\Request; -use app\http\Requests\ImageUploadRequest; +use App\http\Requests\ImageUploadRequest; use Illuminate\Support\Facades\Storage; class DepartmentsController extends Controller From e6d432423dfdcc48a809eee1a8334a8ee3967b2f Mon Sep 17 00:00:00 2001 From: Petri Asikainen Date: Fri, 2 Jul 2021 10:17:29 +0300 Subject: [PATCH 16/32] trait base64 encoded files --- app/Http/Traits/ConvertsBase64toFiles.php | 111 ++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 app/Http/Traits/ConvertsBase64toFiles.php diff --git a/app/Http/Traits/ConvertsBase64toFiles.php b/app/Http/Traits/ConvertsBase64toFiles.php new file mode 100644 index 000000000..5d4f20b5a --- /dev/null +++ b/app/Http/Traits/ConvertsBase64toFiles.php @@ -0,0 +1,111 @@ +request; + } + + /** + * Helper method to get the uploaded files bag. + * + * @return FileBag + */ + private function uploadFilesBag(): FileBag + { + return $this->files; + } + + /** + * Pulls the Base64 contents for each file key and creates + * an UploadedFile instance from it and sets it on the + * request. + * + * @return void + */ + protected function prepareForValidation() + { + $flattened = Arr::dot($this->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); + + $body = $this->bodyParametersBag()->all(); + Arr::forget($body, $key); + $this->bodyParametersBag()->replace($body); + + $files = $this->uploadFilesBag()->all(); + Arr::set($files, $key, $uploadedFile); + $this->uploadFilesBag()->replace($files); + }, null, false); + }); + } +} +/** + * This file based on https://github.com/protonemedia/laravel-mixins/tree/master/src/Request + * + * MIT License + * + * Copyright (c) Protone Media B.V. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ \ No newline at end of file From d7d3681d71289052641f895fd8e190617d9b20e7 Mon Sep 17 00:00:00 2001 From: Petri Asikainen Date: Fri, 2 Jul 2021 10:18:18 +0300 Subject: [PATCH 17/32] trait base64 encoded files --- app/Http/Requests/ImageUploadRequest.php | 19 +++++++++++++++---- app/Http/Traits/ConvertsBase64toFiles.php | 2 +- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/app/Http/Requests/ImageUploadRequest.php b/app/Http/Requests/ImageUploadRequest.php index 0a25ad733..d4ca989c0 100644 --- a/app/Http/Requests/ImageUploadRequest.php +++ b/app/Http/Requests/ImageUploadRequest.php @@ -5,10 +5,13 @@ namespace App\Http\Requests; use App\Models\SnipeModel; use enshrined\svgSanitize\Sanitizer; use Intervention\Image\Facades\Image; +use App\Traits\ConvertsBase64ToFiles; use Storage; class ImageUploadRequest extends Request { + use ConvertsBase64ToFiles; + /** * Determine if the user is authorized to make this request. * @@ -26,10 +29,11 @@ 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) @@ -37,6 +41,13 @@ class ImageUploadRequest extends Request return $this->redirector->back()->withInput()->withErrors($errors, $this->errorBag); } + protected function base64FileKeys(): array + { + return [ + 'image' => 'auto', + ]; + } + /** * Handle and store any images attached to request * @param SnipeModel $item Item the image is associated with diff --git a/app/Http/Traits/ConvertsBase64toFiles.php b/app/Http/Traits/ConvertsBase64toFiles.php index 5d4f20b5a..71d316f84 100644 --- a/app/Http/Traits/ConvertsBase64toFiles.php +++ b/app/Http/Traits/ConvertsBase64toFiles.php @@ -1,6 +1,6 @@ Date: Fri, 2 Jul 2021 10:43:15 +0300 Subject: [PATCH 18/32] case case again.. --- .../{ConvertsBase64toFiles.php => ConvertsBase64ToFiles.php} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename app/Http/Traits/{ConvertsBase64toFiles.php => ConvertsBase64ToFiles.php} (100%) diff --git a/app/Http/Traits/ConvertsBase64toFiles.php b/app/Http/Traits/ConvertsBase64ToFiles.php similarity index 100% rename from app/Http/Traits/ConvertsBase64toFiles.php rename to app/Http/Traits/ConvertsBase64ToFiles.php From 2325b1d8c2bb0b99e582f7d6b9df6e7b3733f92a Mon Sep 17 00:00:00 2001 From: Petri Asikainen Date: Sun, 4 Jul 2021 13:37:05 +0300 Subject: [PATCH 19/32] Try without trait --- app/Http/Requests/ImageUploadRequest.php | 88 +++++++++++++++++++++++- 1 file changed, 86 insertions(+), 2 deletions(-) diff --git a/app/Http/Requests/ImageUploadRequest.php b/app/Http/Requests/ImageUploadRequest.php index d4ca989c0..9f936191d 100644 --- a/app/Http/Requests/ImageUploadRequest.php +++ b/app/Http/Requests/ImageUploadRequest.php @@ -10,7 +10,6 @@ use Storage; class ImageUploadRequest extends Request { - use ConvertsBase64ToFiles; /** * Determine if the user is authorized to make this request. @@ -40,7 +39,10 @@ class ImageUploadRequest extends Request { return $this->redirector->back()->withInput()->withErrors($errors, $this->errorBag); } - + + /** + * Fields that should be traited from base64 to files + */ protected function base64FileKeys(): array { return [ @@ -161,4 +163,86 @@ class ImageUploadRequest extends Request return $item; } + + + /** + * Helper method to get the body parameters bag. + * + * @return \Symfony\Component\HttpFoundation\ParameterBag + */ + private function bodyParametersBag(): ParameterBag + { + return $this->request; + } + + /** + * Helper method to get the uploaded files bag. + * + * @return FileBag + */ + private function uploadFilesBag(): FileBag + { + return $this->files; + } + + /** + * Pulls the Base64 contents for each file key and creates + * an UploadedFile instance from it and sets it on the + * request. + * + * @return void + */ + protected function prepareForValidation() + { + $flattened = Arr::dot($this->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); + + $body = $this->bodyParametersBag()->all(); + Arr::forget($body, $key); + $this->bodyParametersBag()->replace($body); + + $files = $this->uploadFilesBag()->all(); + Arr::set($files, $key, $uploadedFile); + $this->uploadFilesBag()->replace($files); + }, null, false); + }); + } + } From bbe964c6b22d55a4bd5ae53ddc7128b40727e90c Mon Sep 17 00:00:00 2001 From: Petri Asikainen Date: Mon, 5 Jul 2021 09:59:19 +0300 Subject: [PATCH 20/32] debug trait --- app/Http/Requests/ImageUploadRequest.php | 82 +---------------------- app/Http/Traits/ConvertsBase64ToFiles.php | 4 ++ 2 files changed, 5 insertions(+), 81 deletions(-) diff --git a/app/Http/Requests/ImageUploadRequest.php b/app/Http/Requests/ImageUploadRequest.php index 9f936191d..9a5bd1402 100644 --- a/app/Http/Requests/ImageUploadRequest.php +++ b/app/Http/Requests/ImageUploadRequest.php @@ -10,6 +10,7 @@ use Storage; class ImageUploadRequest extends Request { + use ConvertsBase64ToFiles; /** * Determine if the user is authorized to make this request. @@ -163,86 +164,5 @@ class ImageUploadRequest extends Request return $item; } - - /** - * Helper method to get the body parameters bag. - * - * @return \Symfony\Component\HttpFoundation\ParameterBag - */ - private function bodyParametersBag(): ParameterBag - { - return $this->request; - } - - /** - * Helper method to get the uploaded files bag. - * - * @return FileBag - */ - private function uploadFilesBag(): FileBag - { - return $this->files; - } - - /** - * Pulls the Base64 contents for each file key and creates - * an UploadedFile instance from it and sets it on the - * request. - * - * @return void - */ - protected function prepareForValidation() - { - $flattened = Arr::dot($this->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); - - $body = $this->bodyParametersBag()->all(); - Arr::forget($body, $key); - $this->bodyParametersBag()->replace($body); - - $files = $this->uploadFilesBag()->all(); - Arr::set($files, $key, $uploadedFile); - $this->uploadFilesBag()->replace($files); - }, null, false); - }); - } - } diff --git a/app/Http/Traits/ConvertsBase64ToFiles.php b/app/Http/Traits/ConvertsBase64ToFiles.php index 71d316f84..13c939e4d 100644 --- a/app/Http/Traits/ConvertsBase64ToFiles.php +++ b/app/Http/Traits/ConvertsBase64ToFiles.php @@ -88,10 +88,14 @@ trait ConvertsBase64ToFiles $body = $this->bodyParametersBag()->all(); Arr::forget($body, $key); $this->bodyParametersBag()->replace($body); + \Log::debug("Trait: file field $key replaced:". $request->has($key)); + $files = $this->uploadFilesBag()->all(); Arr::set($files, $key, $uploadedFile); $this->uploadFilesBag()->replace($files); + \Log::debug("Trait: file field $key inserted:". $request->hasFile($key)); + }, null, false); }); } From c894e8ceb360a56a053f4a642da6bcb21028e0b8 Mon Sep 17 00:00:00 2001 From: Petri Asikainen Date: Tue, 6 Jul 2021 06:25:37 +0300 Subject: [PATCH 21/32] handle files via standard field --- app/Http/Requests/ImageUploadRequest.php | 26 +++++++++++++++++------ app/Http/Traits/ConvertsBase64ToFiles.php | 19 +++++++---------- 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/app/Http/Requests/ImageUploadRequest.php b/app/Http/Requests/ImageUploadRequest.php index 9a5bd1402..b068e15df 100644 --- a/app/Http/Requests/ImageUploadRequest.php +++ b/app/Http/Requests/ImageUploadRequest.php @@ -5,7 +5,8 @@ namespace App\Http\Requests; use App\Models\SnipeModel; use enshrined\svgSanitize\Sanitizer; use Intervention\Image\Facades\Image; -use App\Traits\ConvertsBase64ToFiles; +use App\Http\Traits\ConvertsBase64ToFiles; +use Illuminate\Http\UploadedFile; use Storage; class ImageUploadRequest extends Request @@ -88,13 +89,24 @@ 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); + } + } + + \Log::debug($image); + + if (isset($image)) { + + if (!config('app.lock_passwords')) { + $ext = $image->getClientOriginalExtension(); $file_name = $type.'-'.$form_fieldname.'-'.str_random(10).'.'.$ext; diff --git a/app/Http/Traits/ConvertsBase64ToFiles.php b/app/Http/Traits/ConvertsBase64ToFiles.php index 13c939e4d..793746dbb 100644 --- a/app/Http/Traits/ConvertsBase64ToFiles.php +++ b/app/Http/Traits/ConvertsBase64ToFiles.php @@ -85,17 +85,14 @@ trait ConvertsBase64ToFiles $uploadedFile = new UploadedFile($tempFilePath, $filename, null, null, true); - $body = $this->bodyParametersBag()->all(); - Arr::forget($body, $key); - $this->bodyParametersBag()->replace($body); - \Log::debug("Trait: file field $key replaced:". $request->has($key)); - - - $files = $this->uploadFilesBag()->all(); - Arr::set($files, $key, $uploadedFile); - $this->uploadFilesBag()->replace($files); - \Log::debug("Trait: file field $key inserted:". $request->hasFile($key)); - + \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: encoded field \"$key\" inserted" ); + }, null, false); }); } From 5f814886792423fe3cfea47f1d1e15bb31387147 Mon Sep 17 00:00:00 2001 From: Petri Asikainen Date: Tue, 6 Jul 2021 06:41:37 +0300 Subject: [PATCH 22/32] fix debug placement --- app/Http/Requests/ImageUploadRequest.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/Http/Requests/ImageUploadRequest.php b/app/Http/Requests/ImageUploadRequest.php index b068e15df..17acff957 100644 --- a/app/Http/Requests/ImageUploadRequest.php +++ b/app/Http/Requests/ImageUploadRequest.php @@ -101,9 +101,8 @@ class ImageUploadRequest extends Request } } - \Log::debug($image); - if (isset($image)) { + \Log::debug($image); if (!config('app.lock_passwords')) { From 15dd7061ed2ad22250927b6d08dc21db5e88dbfa Mon Sep 17 00:00:00 2001 From: Petri Asikainen Date: Tue, 6 Jul 2021 07:00:12 +0300 Subject: [PATCH 23/32] removed unused Bag-functions --- app/Http/Traits/ConvertsBase64ToFiles.php | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/app/Http/Traits/ConvertsBase64ToFiles.php b/app/Http/Traits/ConvertsBase64ToFiles.php index 793746dbb..537d2788c 100644 --- a/app/Http/Traits/ConvertsBase64ToFiles.php +++ b/app/Http/Traits/ConvertsBase64ToFiles.php @@ -6,8 +6,6 @@ use Illuminate\Http\UploadedFile; use Illuminate\Support\Arr; use Illuminate\Support\Collection; use Illuminate\Support\Str; -use Symfony\Component\HttpFoundation\FileBag; -use Symfony\Component\HttpFoundation\ParameterBag; trait ConvertsBase64ToFiles { @@ -16,26 +14,6 @@ trait ConvertsBase64ToFiles return []; } - /** - * Helper method to get the body parameters bag. - * - * @return \Symfony\Component\HttpFoundation\ParameterBag - */ - private function bodyParametersBag(): ParameterBag - { - return $this->request; - } - - /** - * Helper method to get the uploaded files bag. - * - * @return FileBag - */ - private function uploadFilesBag(): FileBag - { - return $this->files; - } - /** * Pulls the Base64 contents for each file key and creates * an UploadedFile instance from it and sets it on the From 23f77b28943c5da2eb6cccd7be97370ed384a110 Mon Sep 17 00:00:00 2001 From: Petri Asikainen Date: Tue, 6 Jul 2021 07:10:03 +0300 Subject: [PATCH 24/32] Fixed case again --- app/Http/Controllers/Api/DepartmentsController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Api/DepartmentsController.php b/app/Http/Controllers/Api/DepartmentsController.php index ad240ec6b..21c2ac114 100644 --- a/app/Http/Controllers/Api/DepartmentsController.php +++ b/app/Http/Controllers/Api/DepartmentsController.php @@ -9,7 +9,7 @@ use App\Http\Transformers\SelectlistTransformer; use App\Models\Department; use Auth; use Illuminate\Http\Request; -use App\http\Requests\ImageUploadRequest; +use App\Http\Requests\ImageUploadRequest; use Illuminate\Support\Facades\Storage; class DepartmentsController extends Controller From 1936fc2ea98a9662401816b03f555ca95d267402 Mon Sep 17 00:00:00 2001 From: Petri Asikainen Date: Tue, 6 Jul 2021 07:26:16 +0300 Subject: [PATCH 25/32] Better debug comment --- app/Http/Traits/ConvertsBase64ToFiles.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Traits/ConvertsBase64ToFiles.php b/app/Http/Traits/ConvertsBase64ToFiles.php index 537d2788c..685106a22 100644 --- a/app/Http/Traits/ConvertsBase64ToFiles.php +++ b/app/Http/Traits/ConvertsBase64ToFiles.php @@ -69,7 +69,7 @@ trait ConvertsBase64ToFiles //Inserting new file to $this-files does not work so have to deal this after $this->offsetSet($key,$uploadedFile); - \Log::debug("Trait: encoded field \"$key\" inserted" ); + \Log::debug("Trait: field \"$key\" inserted as UplodedFile" ); }, null, false); }); From a76b36cad9ee40107d5687a1644ba7ee3866b480 Mon Sep 17 00:00:00 2001 From: Petri Asikainen Date: Wed, 7 Jul 2021 09:08:37 +0300 Subject: [PATCH 26/32] Handle image_source with ConvertBase64ToFiles --- app/Http/Controllers/Api/AssetsController.php | 78 +++++-------------- app/Http/Requests/ImageUploadRequest.php | 5 ++ 2 files changed, 25 insertions(+), 58 deletions(-) diff --git a/app/Http/Controllers/Api/AssetsController.php b/app/Http/Controllers/Api/AssetsController.php index 1f6d47eeb..0fe146cfc 100644 --- a/app/Http/Controllers/Api/AssetsController.php +++ b/app/Http/Controllers/Api/AssetsController.php @@ -416,42 +416,26 @@ class AssetsController extends Controller $asset = new Asset(); $asset->model()->associate(AssetModel::find((int) $request->get('model_id'))); - $asset->name = $request->get('name'); - $asset->serial = $request->get('serial'); - $asset->company_id = Company::getIdForCurrentUser($request->get('company_id')); - $asset->model_id = $request->get('model_id'); - $asset->order_number = $request->get('order_number'); - $asset->notes = $request->get('notes'); - $asset->asset_tag = $request->get('asset_tag', Asset::autoincrement_asset()); - $asset->user_id = Auth::id(); - $asset->archived = '0'; - $asset->physical = '1'; - $asset->depreciate = '0'; - $asset->status_id = $request->get('status_id', 0); - $asset->warranty_months = $request->get('warranty_months', null); - $asset->purchase_cost = Helper::ParseFloat($request->get('purchase_cost')); - $asset->purchase_date = $request->get('purchase_date', null); - $asset->assigned_to = $request->get('assigned_to', null); - $asset->supplier_id = $request->get('supplier_id', 0); - $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); - - 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->name = $request->get('name'); + $asset->serial = $request->get('serial'); + $asset->company_id = Company::getIdForCurrentUser($request->get('company_id')); + $asset->model_id = $request->get('model_id'); + $asset->order_number = $request->get('order_number'); + $asset->notes = $request->get('notes'); + $asset->asset_tag = $request->get('asset_tag', Asset::autoincrement_asset()); + $asset->user_id = Auth::id(); + $asset->archived = '0'; + $asset->physical = '1'; + $asset->depreciate = '0'; + $asset->status_id = $request->get('status_id', 0); + $asset->warranty_months = $request->get('warranty_months', null); + $asset->purchase_cost = Helper::ParseFloat($request->get('purchase_cost')); + $asset->purchase_date = $request->get('purchase_date', null); + $asset->assigned_to = $request->get('assigned_to', null); + $asset->supplier_id = $request->get('supplier_id', 0); + $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); $asset = $request->handleImages($asset); @@ -537,28 +521,6 @@ 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; - } - } - $asset = $request->handleImages($asset); // Update custom fields diff --git a/app/Http/Requests/ImageUploadRequest.php b/app/Http/Requests/ImageUploadRequest.php index 17acff957..3bf922722 100644 --- a/app/Http/Requests/ImageUploadRequest.php +++ b/app/Http/Requests/ImageUploadRequest.php @@ -47,8 +47,13 @@ class ImageUploadRequest extends Request */ 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' ]; } From f24138da44351d28690514deaf2bbf62a8cc455b Mon Sep 17 00:00:00 2001 From: Petri Asikainen Date: Wed, 7 Jul 2021 09:20:38 +0300 Subject: [PATCH 27/32] Revert "Handle image_source with ConvertBase64ToFiles" This reverts commit 168d7f7004793cfd1c6def4bda51316c3e9416c1. --- app/Http/Controllers/Api/AssetsController.php | 39 +++++++++++++++++++ app/Http/Requests/ImageUploadRequest.php | 5 --- 2 files changed, 39 insertions(+), 5 deletions(-) diff --git a/app/Http/Controllers/Api/AssetsController.php b/app/Http/Controllers/Api/AssetsController.php index 0fe146cfc..8f136d58e 100644 --- a/app/Http/Controllers/Api/AssetsController.php +++ b/app/Http/Controllers/Api/AssetsController.php @@ -437,6 +437,22 @@ class AssetsController extends Controller $asset->rtd_location_id = $request->get('rtd_location_id', null); $asset->location_id = $request->get('rtd_location_id', null); + 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. @@ -518,8 +534,31 @@ class AssetsController extends Controller ($request->filled('company_id')) ? $asset->company_id = Company::getIdForCurrentUser($request->get('company_id')) : ''; +($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; + } + } $asset = $request->handleImages($asset); diff --git a/app/Http/Requests/ImageUploadRequest.php b/app/Http/Requests/ImageUploadRequest.php index 3bf922722..17acff957 100644 --- a/app/Http/Requests/ImageUploadRequest.php +++ b/app/Http/Requests/ImageUploadRequest.php @@ -47,13 +47,8 @@ class ImageUploadRequest extends Request */ 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' ]; } From 89cc84f1d9bcebe0c24f8fc9f4a2027201d673c3 Mon Sep 17 00:00:00 2001 From: Petri Asikainen Date: Wed, 7 Jul 2021 09:24:24 +0300 Subject: [PATCH 28/32] convert image_source field This reverts commit b2d3ba74102f76428eefbcf8a01f9329bff4dfc7. --- app/Http/Controllers/Api/AssetsController.php | 39 ------------------- app/Http/Requests/ImageUploadRequest.php | 5 +++ 2 files changed, 5 insertions(+), 39 deletions(-) diff --git a/app/Http/Controllers/Api/AssetsController.php b/app/Http/Controllers/Api/AssetsController.php index 8f136d58e..0fe146cfc 100644 --- a/app/Http/Controllers/Api/AssetsController.php +++ b/app/Http/Controllers/Api/AssetsController.php @@ -437,22 +437,6 @@ class AssetsController extends Controller $asset->rtd_location_id = $request->get('rtd_location_id', null); $asset->location_id = $request->get('rtd_location_id', null); - 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. @@ -534,31 +518,8 @@ class AssetsController extends Controller ($request->filled('company_id')) ? $asset->company_id = Company::getIdForCurrentUser($request->get('company_id')) : ''; -($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; - } - } $asset = $request->handleImages($asset); diff --git a/app/Http/Requests/ImageUploadRequest.php b/app/Http/Requests/ImageUploadRequest.php index 17acff957..3bf922722 100644 --- a/app/Http/Requests/ImageUploadRequest.php +++ b/app/Http/Requests/ImageUploadRequest.php @@ -47,8 +47,13 @@ class ImageUploadRequest extends Request */ 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' ]; } From 2fc3ff671e2c03c59a1afa1a96b93ac80fe2c8ea Mon Sep 17 00:00:00 2001 From: Petri Asikainen Date: Wed, 7 Jul 2021 09:33:48 +0300 Subject: [PATCH 29/32] hand legacy image_source field --- app/Http/Controllers/Api/AssetsController.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/Http/Controllers/Api/AssetsController.php b/app/Http/Controllers/Api/AssetsController.php index 0fe146cfc..7c3cc3fb0 100644 --- a/app/Http/Controllers/Api/AssetsController.php +++ b/app/Http/Controllers/Api/AssetsController.php @@ -521,6 +521,14 @@ class AssetsController extends Controller ($request->filled('rtd_location_id')) ? $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')); + } + $asset = $request->handleImages($asset); // Update custom fields From d50294e8e25e4a2e4361146226bd84a2f47be12b Mon Sep 17 00:00:00 2001 From: Petri Asikainen Date: Thu, 8 Jul 2021 19:50:33 +0300 Subject: [PATCH 30/32] Just mention source of idea as code rewriten --- app/Http/Traits/ConvertsBase64ToFiles.php | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/app/Http/Traits/ConvertsBase64ToFiles.php b/app/Http/Traits/ConvertsBase64ToFiles.php index 685106a22..aed8fc0df 100644 --- a/app/Http/Traits/ConvertsBase64ToFiles.php +++ b/app/Http/Traits/ConvertsBase64ToFiles.php @@ -76,15 +76,5 @@ trait ConvertsBase64ToFiles } } /** - * This file based on https://github.com/protonemedia/laravel-mixins/tree/master/src/Request - * - * MIT License - * - * Copyright (c) Protone Media B.V. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ \ No newline at end of file + * Loosely based on idea https://github.com/protonemedia/laravel-mixins/tree/master/src/Request + * */ \ No newline at end of file From 5d999d2572253709fa89f2fc135e653e0f914a5c Mon Sep 17 00:00:00 2001 From: Petri Asikainen Date: Wed, 14 Jul 2021 08:00:02 +0300 Subject: [PATCH 31/32] legacy image_source support for store --- app/Http/Controllers/Api/AssetsController.php | 48 +++++++++++-------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/app/Http/Controllers/Api/AssetsController.php b/app/Http/Controllers/Api/AssetsController.php index 7c3cc3fb0..0cfef5eb9 100644 --- a/app/Http/Controllers/Api/AssetsController.php +++ b/app/Http/Controllers/Api/AssetsController.php @@ -416,26 +416,34 @@ class AssetsController extends Controller $asset = new Asset(); $asset->model()->associate(AssetModel::find((int) $request->get('model_id'))); - $asset->name = $request->get('name'); - $asset->serial = $request->get('serial'); - $asset->company_id = Company::getIdForCurrentUser($request->get('company_id')); - $asset->model_id = $request->get('model_id'); - $asset->order_number = $request->get('order_number'); - $asset->notes = $request->get('notes'); - $asset->asset_tag = $request->get('asset_tag', Asset::autoincrement_asset()); - $asset->user_id = Auth::id(); - $asset->archived = '0'; - $asset->physical = '1'; - $asset->depreciate = '0'; - $asset->status_id = $request->get('status_id', 0); - $asset->warranty_months = $request->get('warranty_months', null); - $asset->purchase_cost = Helper::ParseFloat($request->get('purchase_cost')); - $asset->purchase_date = $request->get('purchase_date', null); - $asset->assigned_to = $request->get('assigned_to', null); - $asset->supplier_id = $request->get('supplier_id', 0); - $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); + $asset->name = $request->get('name'); + $asset->serial = $request->get('serial'); + $asset->company_id = Company::getIdForCurrentUser($request->get('company_id')); + $asset->model_id = $request->get('model_id'); + $asset->order_number = $request->get('order_number'); + $asset->notes = $request->get('notes'); + $asset->asset_tag = $request->get('asset_tag', Asset::autoincrement_asset()); + $asset->user_id = Auth::id(); + $asset->archived = '0'; + $asset->physical = '1'; + $asset->depreciate = '0'; + $asset->status_id = $request->get('status_id', 0); + $asset->warranty_months = $request->get('warranty_months', null); + $asset->purchase_cost = Helper::ParseFloat($request->get('purchase_cost')); + $asset->purchase_date = $request->get('purchase_date', null); + $asset->assigned_to = $request->get('assigned_to', null); + $asset->supplier_id = $request->get('supplier_id', 0); + $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')); + } $asset = $request->handleImages($asset); From f7534041978b3b500c1b7df0eb098d17a70565b7 Mon Sep 17 00:00:00 2001 From: Petri Asikainen Date: Thu, 15 Jul 2021 12:01:54 +0300 Subject: [PATCH 32/32] missed this when rebasing --- app/Http/Controllers/Api/LocationsController.php | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/app/Http/Controllers/Api/LocationsController.php b/app/Http/Controllers/Api/LocationsController.php index f2aa645db..2655113c2 100644 --- a/app/Http/Controllers/Api/LocationsController.php +++ b/app/Http/Controllers/Api/LocationsController.php @@ -2,18 +2,13 @@ namespace App\Http\Controllers\Api; -<<<<<<< HEAD -======= -use Illuminate\Http\Request; -use App\Http\Requests\ImageUploadRequest; -use App\Http\Controllers\Controller; ->>>>>>> f9da83bc4 (Support images and multipart requests) use App\Helpers\Helper; use App\Http\Controllers\Controller; 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;