From 75b527ab599395675c23a187d81f5b413b25df20 Mon Sep 17 00:00:00 2001 From: snipe Date: Wed, 25 Oct 2017 22:35:58 -0700 Subject: [PATCH] Features/image uploads (#4320) * Locations API support for image * Added manufacturers API support for image * Added manufacturers API support for image * Added image support for locations add/update * Added manufacturer image upload support to controller * General image string * Added blade support for image uploads/delete image * Added $request support (from Input::) * Added image support in API transformers * Added image to Manufacturers presenter for data table * Migration to create image fields * Ignore the contents of the new image directories * Create new image upload directories * Created components/consumables uploads directory * Fixed missing textSearch scope from companies * Added ignore for companies uploads directory * Added blade support for image upload * Fixed path to upload directory on edit * Added company image upport to transformers, controllers * Added image support for categories * Added support for images in Departments * Added support for image in Consumables * Added image support for components --- .gitignore | 7 ++ .../Controllers/Api/CategoriesController.php | 4 +- .../Controllers/Api/ComponentsController.php | 2 +- .../Controllers/Api/ConsumablesController.php | 2 +- .../Controllers/Api/DepartmentsController.php | 5 +- .../Controllers/Api/LocationsController.php | 3 +- .../Api/ManufacturersController.php | 4 +- .../Controllers/Api/SuppliersController.php | 2 +- app/Http/Controllers/CategoriesController.php | 32 +++++- app/Http/Controllers/CompaniesController.php | 31 +++++- app/Http/Controllers/ComponentsController.php | 31 +++++- .../Controllers/ConsumablesController.php | 77 +++++++++----- .../Controllers/DepartmentsController.php | 29 +++++- app/Http/Controllers/LocationsController.php | 97 +++++++++++------- .../Controllers/ManufacturersController.php | 30 +++++- app/Http/Controllers/SuppliersController.php | 15 ++- .../Transformers/CategoriesTransformer.php | 1 + .../Transformers/CompaniesTransformer.php | 1 + .../Transformers/ComponentsTransformer.php | 3 +- .../Transformers/ConsumablesTransformer.php | 3 +- .../Transformers/DepartmentsTranformer.php | 1 + .../Transformers/LocationsTransformer.php | 1 + .../Transformers/ManufacturersTransformer.php | 1 + .../Transformers/SuppliersTransformer.php | 2 +- app/Models/Company.php | 16 +++ app/Presenters/CategoryPresenter.php | 7 ++ app/Presenters/CompanyPresenter.php | 8 ++ app/Presenters/ComponentPresenter.php | 8 ++ app/Presenters/ConsumablePresenter.php | 9 ++ app/Presenters/ManufacturerPresenter.php | 10 +- ...uploads_to_locations_manufacturers_etc.php | 71 +++++++++++++ public/uploads/categories/.gitignore | 1 + public/uploads/companies/.gitignore | 1 + .../companies/LNwfCJ5P4WtaViO1XYbkWgX8D.jpg | Bin 0 -> 20709 bytes .../companies/RZAs6WvRP9P5WMJIaPS0f1rDT.jpg | Bin 0 -> 18695 bytes public/uploads/components/.gitignore | 1 + public/uploads/consumables/.gitignore | 1 + public/uploads/departments/.gitignore | 1 + public/uploads/locations/.gitignore | 1 + public/uploads/manufacturers/.gitignore | 1 + resources/lang/en/general.php | 15 +-- resources/views/categories/edit.blade.php | 25 +++++ resources/views/companies/edit.blade.php | 21 ++++ resources/views/components/edit.blade.php | 20 ++++ resources/views/components/view.blade.php | 6 ++ resources/views/consumables/edit.blade.php | 19 ++++ resources/views/consumables/view.blade.php | 6 ++ resources/views/departments/edit.blade.php | 18 ++++ resources/views/departments/index.blade.php | 2 +- resources/views/locations/edit.blade.php | 19 ++++ resources/views/locations/index.blade.php | 3 +- resources/views/manufacturers/edit.blade.php | 21 ++++ resources/views/suppliers/index.blade.php | 2 +- 53 files changed, 595 insertions(+), 102 deletions(-) create mode 100644 database/migrations/2017_10_25_202930_add_images_uploads_to_locations_manufacturers_etc.php create mode 100755 public/uploads/categories/.gitignore create mode 100755 public/uploads/companies/.gitignore create mode 100644 public/uploads/companies/LNwfCJ5P4WtaViO1XYbkWgX8D.jpg create mode 100644 public/uploads/companies/RZAs6WvRP9P5WMJIaPS0f1rDT.jpg create mode 100755 public/uploads/components/.gitignore create mode 100755 public/uploads/consumables/.gitignore create mode 100755 public/uploads/departments/.gitignore create mode 100755 public/uploads/locations/.gitignore create mode 100755 public/uploads/manufacturers/.gitignore diff --git a/.gitignore b/.gitignore index d158248e1d..437be0ca0d 100755 --- a/.gitignore +++ b/.gitignore @@ -28,8 +28,15 @@ public/uploads/logo.svg public/uploads/models/* public/uploads/suppliers/* public/uploads/accessories/* +public/uploads/locations/* +public/uploads/manufacturers/* +public/uploads/components/* +public/uploads/consumables/* +public/uploads/companies/* +public/uploads/categories/* public/uploads/users/* storage/app/private_uploads/users/* +public/uploads/departments/* storage/debugbar/ storage/dumps/* storage/laravel-backups diff --git a/app/Http/Controllers/Api/CategoriesController.php b/app/Http/Controllers/Api/CategoriesController.php index 58f6dd0a14..1063ec05c0 100644 --- a/app/Http/Controllers/Api/CategoriesController.php +++ b/app/Http/Controllers/Api/CategoriesController.php @@ -20,9 +20,9 @@ class CategoriesController extends Controller public function index(Request $request) { $this->authorize('view', Category::class); - $allowed_columns = ['id', 'name','category_type','use_default_eula','eula_text', 'require_acceptance','checkin_email', 'assets_count', 'accessories_count', 'consumables_count', 'components_count']; + $allowed_columns = ['id', 'name','category_type','use_default_eula','eula_text', 'require_acceptance','checkin_email', 'assets_count', 'accessories_count', 'consumables_count', 'components_count', 'image']; - $categories = Category::select(['id', 'created_at', 'updated_at', 'name','category_type','use_default_eula','eula_text', 'require_acceptance','checkin_email']) + $categories = Category::select(['id', 'created_at', 'updated_at', 'name','category_type','use_default_eula','eula_text', 'require_acceptance','checkin_email','image']) ->withCount('assets', 'accessories', 'consumables', 'components'); if ($request->has('search')) { diff --git a/app/Http/Controllers/Api/ComponentsController.php b/app/Http/Controllers/Api/ComponentsController.php index 48e4d05ca3..4e7a3c4ed7 100644 --- a/app/Http/Controllers/Api/ComponentsController.php +++ b/app/Http/Controllers/Api/ComponentsController.php @@ -34,7 +34,7 @@ class ComponentsController extends Controller $offset = request('offset', 0); $limit = request('limit', 50); - $allowed_columns = ['id','name','min_amt','order_number','serial','purchase_date','purchase_cost','company','category','qty','location']; + $allowed_columns = ['id','name','min_amt','order_number','serial','purchase_date','purchase_cost','company','category','qty','location','image']; $order = $request->input('order') === 'asc' ? 'asc' : 'desc'; $sort = in_array($request->input('sort'), $allowed_columns) ? $request->input('sort') : 'created_at'; diff --git a/app/Http/Controllers/Api/ConsumablesController.php b/app/Http/Controllers/Api/ConsumablesController.php index 793de92140..e817c2b07f 100644 --- a/app/Http/Controllers/Api/ConsumablesController.php +++ b/app/Http/Controllers/Api/ConsumablesController.php @@ -43,7 +43,7 @@ class ConsumablesController extends Controller $offset = request('offset', 0); $limit = request('limit', 50); - $allowed_columns = ['id','name','order_number','min_amt','purchase_date','purchase_cost','company','category','model_number', 'item_no', 'manufacturer','location','qty']; + $allowed_columns = ['id','name','order_number','min_amt','purchase_date','purchase_cost','company','category','model_number', 'item_no', 'manufacturer','location','qty','image']; $order = $request->input('order') === 'asc' ? 'asc' : 'desc'; $sort = in_array($request->input('sort'), $allowed_columns) ? $request->input('sort') : 'created_at'; diff --git a/app/Http/Controllers/Api/DepartmentsController.php b/app/Http/Controllers/Api/DepartmentsController.php index 8119c735ef..e7f0ac2996 100644 --- a/app/Http/Controllers/Api/DepartmentsController.php +++ b/app/Http/Controllers/Api/DepartmentsController.php @@ -21,7 +21,7 @@ class DepartmentsController extends Controller public function index(Request $request) { $this->authorize('view', Department::class); - $allowed_columns = ['id','name']; + $allowed_columns = ['id','name','image']; $departments = Department::select([ 'id', @@ -30,7 +30,8 @@ class DepartmentsController extends Controller 'company_id', 'manager_id', 'created_at', - 'updated_at' + 'updated_at', + 'image' ])->with('users')->with('location')->with('manager')->with('company')->withCount('users'); if ($request->has('search')) { diff --git a/app/Http/Controllers/Api/LocationsController.php b/app/Http/Controllers/Api/LocationsController.php index 06d06d936b..ae4ad5eb7c 100644 --- a/app/Http/Controllers/Api/LocationsController.php +++ b/app/Http/Controllers/Api/LocationsController.php @@ -21,7 +21,7 @@ class LocationsController extends Controller { $this->authorize('view', Location::class); $allowed_columns = ['id','name','address','address2','city','state','country','zip','created_at', - 'updated_at','parent_id', 'manager_id']; + 'updated_at','parent_id', 'manager_id','image']; $locations = Location::with('parent', 'manager', 'childLocations')->select([ 'locations.id', @@ -36,6 +36,7 @@ class LocationsController extends Controller 'locations.manager_id', 'locations.created_at', 'locations.updated_at', + 'locations.image', 'locations.currency' ])->withCount('locationAssets') ->withCount('assignedAssets') diff --git a/app/Http/Controllers/Api/ManufacturersController.php b/app/Http/Controllers/Api/ManufacturersController.php index 3840bc3634..6ecf848c25 100644 --- a/app/Http/Controllers/Api/ManufacturersController.php +++ b/app/Http/Controllers/Api/ManufacturersController.php @@ -21,10 +21,10 @@ class ManufacturersController extends Controller public function index(Request $request) { $this->authorize('view', Manufacturer::class); - $allowed_columns = ['id','name','url','support_url','support_email','support_phone','created_at','updated_at']; + $allowed_columns = ['id','name','url','support_url','support_email','support_phone','created_at','updated_at','image']; $manufacturers = Manufacturer::select( - array('id','name','url','support_url','support_email','support_phone','created_at','updated_at') + array('id','name','url','support_url','support_email','support_phone','created_at','updated_at','image') )->withCount('assets')->withCount('licenses')->withCount('consumables')->withCount('accessories'); diff --git a/app/Http/Controllers/Api/SuppliersController.php b/app/Http/Controllers/Api/SuppliersController.php index 063f82438b..fb3bc282ed 100644 --- a/app/Http/Controllers/Api/SuppliersController.php +++ b/app/Http/Controllers/Api/SuppliersController.php @@ -23,7 +23,7 @@ class SuppliersController extends Controller $allowed_columns = ['id','name','address','phone','contact','fax','email','image','assets_count','licenses_count', 'accessories_count']; $suppliers = Supplier::select( - array('id','name','address','address2','city','state','country','fax', 'phone','email','contact','created_at','updated_at','deleted_at') + array('id','name','address','address2','city','state','country','fax', 'phone','email','contact','created_at','updated_at','deleted_at','image') )->withCount('assets')->withCount('licenses')->withCount('accessories')->whereNull('deleted_at'); diff --git a/app/Http/Controllers/CategoriesController.php b/app/Http/Controllers/CategoriesController.php index b502050e6a..f1ccb10668 100755 --- a/app/Http/Controllers/CategoriesController.php +++ b/app/Http/Controllers/CategoriesController.php @@ -15,6 +15,8 @@ use Lang; use Redirect; use Str; use View; +use Image; +use App\Http\Requests\ImageUploadRequest; /** * This class controls all actions related to Categories for @@ -67,7 +69,7 @@ class CategoriesController extends Controller * @since [v1.0] * @return \Illuminate\Http\RedirectResponse */ - public function store(Request $request) + public function store(ImageUploadRequest $request) { // create a new model instance $category = new Category(); @@ -80,6 +82,18 @@ class CategoriesController extends Controller $category->checkin_email = $request->input('checkin_email', '0'); $category->user_id = Auth::id(); + if ($request->file('image')) { + $image = $request->file('image'); + $file_name = str_random(25).".".$image->getClientOriginalExtension(); + $path = public_path('uploads/categories/'.$file_name); + Image::make($image->getRealPath())->resize(200, null, function ($constraint) { + $constraint->aspectRatio(); + $constraint->upsize(); + })->save($path); + $category->image = $file_name; + } + + if ($category->save()) { return redirect()->route('categories.index')->with('success', trans('admin/categories/message.create.success')); } @@ -118,7 +132,7 @@ class CategoriesController extends Controller * @return \Illuminate\Http\RedirectResponse * @since [v1.0] */ - public function update(Request $request, $categoryId = null) + public function update(ImageUploadRequest $request, $categoryId = null) { // Check if the blog post exists if (is_null($category = Category::find($categoryId))) { @@ -136,6 +150,20 @@ class CategoriesController extends Controller $category->require_acceptance = $request->input('require_acceptance', '0'); $category->checkin_email = $request->input('checkin_email', '0'); + if ($request->file('image')) { + $image = $request->file('image'); + $file_name = str_random(25).".".$image->getClientOriginalExtension(); + $path = public_path('uploads/categories/'.$file_name); + Image::make($image->getRealPath())->resize(200, null, function ($constraint) { + $constraint->aspectRatio(); + $constraint->upsize(); + })->save($path); + $category->image = $file_name; + } elseif ($request->input('image_delete')=='1') { + $category->image = null; + } + + if ($category->save()) { // Redirect to the new category page return redirect()->route('categories.index')->with('success', trans('admin/categories/message.update.success')); diff --git a/app/Http/Controllers/CompaniesController.php b/app/Http/Controllers/CompaniesController.php index 8ef76a9333..c6dbea0fad 100644 --- a/app/Http/Controllers/CompaniesController.php +++ b/app/Http/Controllers/CompaniesController.php @@ -7,6 +7,8 @@ use Lang; use Redirect; use View; use Illuminate\Http\Request; +use Image; +use App\Http\Requests\ImageUploadRequest; /** * This controller handles all actions related to Companies for @@ -50,11 +52,22 @@ final class CompaniesController extends Controller * @param Request $request * @return \Illuminate\Http\RedirectResponse */ - public function store(Request $request) + public function store(ImageUploadRequest $request) { $company = new Company; $company->name = $request->input('name'); + if ($request->file('image')) { + $image = $request->file('image'); + $file_name = str_random(25).".".$image->getClientOriginalExtension(); + $path = public_path('uploads/companies/'.$file_name); + Image::make($image->getRealPath())->resize(200, null, function ($constraint) { + $constraint->aspectRatio(); + $constraint->upsize(); + })->save($path); + $company->image = $file_name; + } + if ($company->save()) { return redirect()->route('companies.index') ->with('success', trans('admin/companies/message.create.success')); @@ -89,7 +102,7 @@ final class CompaniesController extends Controller * @param int $companyId * @return \Illuminate\Http\RedirectResponse */ - public function update(Request $request, $companyId) + public function update(ImageUploadRequest $request, $companyId) { if (is_null($company = Company::find($companyId))) { return redirect()->route('companies.index')->with('error', trans('admin/companies/message.does_not_exist')); @@ -97,6 +110,20 @@ final class CompaniesController extends Controller $company->name = $request->input('name'); + if ($request->file('image')) { + $image = $request->file('image'); + $file_name = str_random(25).".".$image->getClientOriginalExtension(); + $path = public_path('uploads/companies/'.$file_name); + Image::make($image->getRealPath())->resize(200, null, function ($constraint) { + $constraint->aspectRatio(); + $constraint->upsize(); + })->save($path); + $company->image = $file_name; + } elseif ($request->input('image_delete')=='1') { + $company->image = null; + } + + if ($company->save()) { return redirect()->route('companies.index') ->with('success', trans('admin/companies/message.update.success')); diff --git a/app/Http/Controllers/ComponentsController.php b/app/Http/Controllers/ComponentsController.php index c0636379d7..e06cb32246 100644 --- a/app/Http/Controllers/ComponentsController.php +++ b/app/Http/Controllers/ComponentsController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers; use App\Helpers\Helper; +use App\Http\Requests\ImageUploadRequest; use App\Models\Company; use App\Models\Component; use App\Models\CustomField; @@ -21,6 +22,7 @@ use View; use Validator; use Illuminate\Http\Request; use Gate; +use Image; /** * This class controls all actions related to Components for @@ -74,7 +76,7 @@ class ComponentsController extends Controller * @since [v3.0] * @return \Illuminate\Http\RedirectResponse */ - public function store(Request $request) + public function store(ImageUploadRequest $request) { $this->authorize('create', Component::class); $component = new Component(); @@ -90,6 +92,18 @@ class ComponentsController extends Controller $component->qty = $request->input('qty'); $component->user_id = Auth::id(); + + if ($request->file('image')) { + $image = $request->file('image'); + $file_name = str_random(25).".".$image->getClientOriginalExtension(); + $path = public_path('uploads/components/'.$file_name); + Image::make($image->getRealPath())->resize(200, null, function ($constraint) { + $constraint->aspectRatio(); + $constraint->upsize(); + })->save($path); + $component->image = $file_name; + } + if ($component->save()) { return redirect()->route('components.index')->with('success', trans('admin/components/message.create.success')); } @@ -129,7 +143,7 @@ class ComponentsController extends Controller * @since [v3.0] * @return \Illuminate\Http\RedirectResponse */ - public function update($componentId = null) + public function update(ImageUploadRequest $request, $componentId = null) { if (is_null($component = Component::find($componentId))) { return redirect()->route('components.index')->with('error', trans('admin/components/message.does_not_exist')); @@ -150,6 +164,19 @@ class ComponentsController extends Controller $component->purchase_cost = request('purchase_cost'); $component->qty = Input::get('qty'); + if ($request->file('image')) { + $image = $request->file('image'); + $file_name = str_random(25).".".$image->getClientOriginalExtension(); + $path = public_path('uploads/components/'.$file_name); + Image::make($image->getRealPath())->resize(200, null, function ($constraint) { + $constraint->aspectRatio(); + $constraint->upsize(); + })->save($path); + $component->image = $file_name; + } elseif ($request->input('image_delete')=='1') { + $component->image = null; + } + if ($component->save()) { return redirect()->route('components.index')->with('success', trans('admin/components/message.update.success')); } diff --git a/app/Http/Controllers/ConsumablesController.php b/app/Http/Controllers/ConsumablesController.php index eb61431258..dcaa164c05 100644 --- a/app/Http/Controllers/ConsumablesController.php +++ b/app/Http/Controllers/ConsumablesController.php @@ -19,6 +19,8 @@ use Slack; use Str; use View; use Gate; +use Image; +use App\Http\Requests\ImageUploadRequest; /** * This controller handles all actions related to Consumables for @@ -72,24 +74,36 @@ class ConsumablesController extends Controller * @since [v1.0] * @return \Illuminate\Http\RedirectResponse */ - public function store() + public function store(ImageUploadRequest $request) { $this->authorize('create', Consumable::class); $consumable = new Consumable(); - $consumable->name = Input::get('name'); - $consumable->category_id = Input::get('category_id'); - $consumable->location_id = Input::get('location_id'); - $consumable->company_id = Company::getIdForCurrentUser(Input::get('company_id')); - $consumable->order_number = Input::get('order_number'); - $consumable->min_amt = Input::get('min_amt'); - $consumable->manufacturer_id = Input::get('manufacturer_id'); - $consumable->model_number = Input::get('model_number'); - $consumable->item_no = Input::get('item_no'); - $consumable->purchase_date = Input::get('purchase_date'); - $consumable->purchase_cost = Helper::ParseFloat(Input::get('purchase_cost')); - $consumable->qty = Input::get('qty'); + $consumable->name = $request->input('name'); + $consumable->category_id = $request->input('category_id'); + $consumable->location_id = $request->input('location_id'); + $consumable->company_id = Company::getIdForCurrentUser($request->input('company_id')); + $consumable->order_number = $request->input('order_number'); + $consumable->min_amt = $request->input('min_amt'); + $consumable->manufacturer_id = $request->input('manufacturer_id'); + $consumable->model_number = $request->input('model_number'); + $consumable->item_no = $request->input('item_no'); + $consumable->purchase_date = $request->input('purchase_date'); + $consumable->purchase_cost = Helper::ParseFloat($request->input('purchase_cost')); + $consumable->qty = $request->input('qty'); $consumable->user_id = Auth::id(); + + if ($request->file('image')) { + $image = $request->file('image'); + $file_name = str_random(25).".".$image->getClientOriginalExtension(); + $path = public_path('uploads/consumables/'.$file_name); + Image::make($image->getRealPath())->resize(200, null, function ($constraint) { + $constraint->aspectRatio(); + $constraint->upsize(); + })->save($path); + $consumable->image = $file_name; + } + if ($consumable->save()) { return redirect()->route('consumables.index')->with('success', trans('admin/consumables/message.create.success')); } @@ -132,7 +146,7 @@ class ConsumablesController extends Controller * @since [v1.0] * @return \Illuminate\Http\RedirectResponse */ - public function update($consumableId = null) + public function update(ImageUploadRequest $request, $consumableId = null) { if (is_null($consumable = Consumable::find($consumableId))) { return redirect()->route('consumables.index')->with('error', trans('admin/consumables/message.does_not_exist')); @@ -140,19 +154,32 @@ class ConsumablesController extends Controller $this->authorize($consumable); - $consumable->name = Input::get('name'); - $consumable->category_id = Input::get('category_id'); - $consumable->location_id = Input::get('location_id'); - $consumable->company_id = Company::getIdForCurrentUser(Input::get('company_id')); - $consumable->order_number = Input::get('order_number'); - $consumable->min_amt = Input::get('min_amt'); - $consumable->manufacturer_id = Input::get('manufacturer_id'); - $consumable->model_number = Input::get('model_number'); - $consumable->item_no = Input::get('item_no'); - $consumable->purchase_date = Input::get('purchase_date'); - $consumable->purchase_cost = Helper::ParseFloat(Input::get('purchase_cost')); + $consumable->name = $request->input('name'); + $consumable->category_id = $request->input('category_id'); + $consumable->location_id = $request->input('location_id'); + $consumable->company_id = Company::getIdForCurrentUser($request->input('company_id')); + $consumable->order_number = $request->input('order_number'); + $consumable->min_amt = $request->input('min_amt'); + $consumable->manufacturer_id = $request->input('manufacturer_id'); + $consumable->model_number = $request->input('model_number'); + $consumable->item_no = $request->input('item_no'); + $consumable->purchase_date = $request->input('purchase_date'); + $consumable->purchase_cost = Helper::ParseFloat(Input::get('purchase_cost')); $consumable->qty = Helper::ParseFloat(Input::get('qty')); + if ($request->file('image')) { + $image = $request->file('image'); + $file_name = str_random(25).".".$image->getClientOriginalExtension(); + $path = public_path('uploads/consumables/'.$file_name); + Image::make($image->getRealPath())->resize(200, null, function ($constraint) { + $constraint->aspectRatio(); + $constraint->upsize(); + })->save($path); + $consumable->image = $file_name; + } elseif ($request->input('image_delete')=='1') { + $consumable->image = null; + } + if ($consumable->save()) { return redirect()->route('consumables.index')->with('success', trans('admin/consumables/message.update.success')); } diff --git a/app/Http/Controllers/DepartmentsController.php b/app/Http/Controllers/DepartmentsController.php index a78e2cecf0..51769614b4 100644 --- a/app/Http/Controllers/DepartmentsController.php +++ b/app/Http/Controllers/DepartmentsController.php @@ -6,6 +6,8 @@ use Illuminate\Http\Request; use App\Models\Department; use App\Helpers\Helper; use Auth; +use Image; +use App\Http\Requests\ImageUploadRequest; class DepartmentsController extends Controller { @@ -43,7 +45,7 @@ class DepartmentsController extends Controller * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ - public function store(Request $request) + public function store(ImageUploadRequest $request) { $this->authorize('create', Department::class); $department = new Department; @@ -51,6 +53,17 @@ class DepartmentsController extends Controller $department->user_id = Auth::user()->id; $department->manager_id = ($request->has('manager_id' ) ? $request->input('manager_id') : null); + if ($request->file('image')) { + $image = $request->file('image'); + $file_name = str_random(25).".".$image->getClientOriginalExtension(); + $path = public_path('uploads/departments/'.$file_name); + Image::make($image->getRealPath())->resize(200, null, function ($constraint) { + $constraint->aspectRatio(); + $constraint->upsize(); + })->save($path); + $department->image = $file_name; + } + if ($department->save()) { return redirect()->route("departments.index")->with('success', trans('admin/departments/message.create.success')); } @@ -145,6 +158,20 @@ class DepartmentsController extends Controller } $department->fill($request->all()); + + if ($request->file('image')) { + $image = $request->file('image'); + $file_name = str_random(25).".".$image->getClientOriginalExtension(); + $path = public_path('uploads/departments/'.$file_name); + Image::make($image->getRealPath())->resize(200, null, function ($constraint) { + $constraint->aspectRatio(); + $constraint->upsize(); + })->save($path); + $department->image = $file_name; + } elseif ($request->input('image_delete')=='1') { + $department->image = null; + } + $department->manager_id = ($request->has('manager_id' ) ? $request->input('manager_id') : null); if ($department->save()) { diff --git a/app/Http/Controllers/LocationsController.php b/app/Http/Controllers/LocationsController.php index ffe480c63f..dc0cb1fe11 100755 --- a/app/Http/Controllers/LocationsController.php +++ b/app/Http/Controllers/LocationsController.php @@ -16,6 +16,8 @@ use Validator; use View; use Auth; use Symfony\Component\HttpFoundation\JsonResponse; +use Image; +use App\Http\Requests\ImageUploadRequest; /** * This controller handles all actions related to Locations for @@ -77,22 +79,33 @@ class LocationsController extends Controller * @since [v1.0] * @return \Illuminate\Http\RedirectResponse */ - public function store() + public function store(ImageUploadRequest $request) { $location = new Location(); - $location->name = Input::get('name'); - $location->parent_id = Input::get('parent_id', null); - $location->currency = Input::get('currency', '$'); - $location->address = Input::get('address'); - $location->address2 = Input::get('address2'); - $location->city = Input::get('city'); - $location->state = Input::get('state'); - $location->country = Input::get('country'); - $location->zip = Input::get('zip'); - $location->ldap_ou = Input::get('ldap_ou'); - $location->manager_id = Input::get('manager_id'); + $location->name = $request->input('name'); + $location->parent_id = $request->input('parent_id', null); + $location->currency = $request->input('currency', '$'); + $location->address = $request->input('address'); + $location->address2 = $request->input('address2'); + $location->city = $request->input('city'); + $location->state = $request->input('state'); + $location->country = $request->input('country'); + $location->zip = $request->input('zip'); + $location->ldap_ou = $request->input('ldap_ou'); + $location->manager_id = $request->input('manager_id'); $location->user_id = Auth::id(); + if ($request->file('image')) { + $image = $request->file('image'); + $file_name = str_random(25).".".$image->getClientOriginalExtension(); + $path = public_path('uploads/locations/'.$file_name); + Image::make($image->getRealPath())->resize(200, null, function ($constraint) { + $constraint->aspectRatio(); + $constraint->upsize(); + })->save($path); + $location->image = $file_name; + } + if ($location->save()) { return redirect()->route("locations.index")->with('success', trans('admin/locations/message.create.success')); } @@ -108,7 +121,7 @@ class LocationsController extends Controller * @since [v1.0] * @return String JSON */ - public function apiStore() + public function apiStore(Request $request) { $new['currency']=Setting::first()->default_currency; @@ -116,13 +129,13 @@ class LocationsController extends Controller $location = new Location(); // Save the location data - $location->name = Input::get('name'); + $location->name = $request->input('name'); $location->currency = Setting::first()->default_currency; //e(Input::get('currency')); $location->address = ''; //e(Input::get('address')); // $location->address2 = e(Input::get('address2')); - $location->city = Input::get('city'); + $location->city = $request->input('city'); $location->state = '';//e(Input::get('state')); - $location->country = Input::get('country'); + $location->country = $request->input('country'); // $location->zip = e(Input::get('zip')); $location->user_id = Auth::id(); @@ -172,7 +185,7 @@ class LocationsController extends Controller * @since [v1.0] * @return \Illuminate\Http\RedirectResponse */ - public function update($locationId = null) + public function update(ImageUploadRequest $request, $locationId = null) { // Check if the location exists if (is_null($location = Location::find($locationId))) { @@ -180,24 +193,35 @@ class LocationsController extends Controller } // Update the location data - $location->name = Input::get('name'); - $location->parent_id = Input::get('parent_id', null); - $location->currency = Input::get('currency', '$'); - $location->address = Input::get('address'); - $location->address2 = Input::get('address2'); - $location->city = Input::get('city'); - $location->state = Input::get('state'); - $location->country = Input::get('country'); - $location->zip = Input::get('zip'); - $location->ldap_ou = Input::get('ldap_ou'); - $location->manager_id = Input::get('manager_id'); + $location->name = $request->input('name'); + $location->parent_id = $request->input('parent_id', null); + $location->currency = $request->input('currency', '$'); + $location->address = $request->input('address'); + $location->address2 = $request->input('address2'); + $location->city = $request->input('city'); + $location->state = $request->input('state'); + $location->country = $request->input('country'); + $location->zip = $request->input('zip'); + $location->ldap_ou = $request->input('ldap_ou'); + $location->manager_id = $request->input('manager_id'); + + if ($request->file('image')) { + $image = $request->file('image'); + $file_name = str_random(25).".".$image->getClientOriginalExtension(); + $path = public_path('uploads/locations/'.$file_name); + Image::make($image->getRealPath())->resize(200, null, function ($constraint) { + $constraint->aspectRatio(); + $constraint->upsize(); + })->save($path); + $location->image = $file_name; + } elseif ($request->input('image_delete')=='1') { + $location->image = null; + } + - // Was the location updated? if ($location->save()) { - // Redirect to the saved location page return redirect()->route("locations.index")->with('success', trans('admin/locations/message.update.success')); } - // Redirect to the location management page return redirect()->back()->withInput()->withInput()->withErrors($location->getErrors()); } @@ -211,20 +235,22 @@ class LocationsController extends Controller */ public function destroy($locationId) { - // Check if the location exists if (is_null($location = Location::find($locationId))) { - // Redirect to the blogs management page return redirect()->to(route('locations.index'))->with('error', trans('admin/locations/message.not_found')); } if ($location->users->count() > 0) { return redirect()->to(route('locations.index'))->with('error', trans('admin/locations/message.assoc_users')); + } elseif ($location->childLocations->count() > 0) { return redirect()->to(route('locations.index'))->with('error', trans('admin/locations/message.assoc_child_loc')); + } elseif ($location->assets->count() > 0) { return redirect()->to(route('locations.index'))->with('error', trans('admin/locations/message.assoc_assets')); + } elseif ($location->assignedassets->count() > 0) { return redirect()->to(route('locations.index'))->with('error', trans('admin/locations/message.assoc_assets')); + } else { $location->delete(); return redirect()->to(route('locations.index'))->with('success', trans('admin/locations/message.delete.success')); @@ -248,11 +274,8 @@ class LocationsController extends Controller if (isset($location->id)) { return view('locations/view', compact('location')); } - // Prepare the error message - $error = trans('admin/locations/message.does_not_exist', compact('id')); - // Redirect to the user management page - return redirect()->route('locations.index')->with('error', $error); + return redirect()->route('locations.index')->with('error', trans('admin/locations/message.does_not_exist', compact('id'))); } } diff --git a/app/Http/Controllers/ManufacturersController.php b/app/Http/Controllers/ManufacturersController.php index 1f20d5ccfc..18396ac452 100755 --- a/app/Http/Controllers/ManufacturersController.php +++ b/app/Http/Controllers/ManufacturersController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers; use App\Helpers\Helper; +use App\Http\Requests\ImageUploadRequest; use App\Models\CustomField; use App\Models\Manufacturer; use Auth; @@ -13,6 +14,7 @@ use Redirect; use Str; use View; use Illuminate\Http\Request; +use Image; /** * This controller handles all actions related to Manufacturers for @@ -60,7 +62,7 @@ class ManufacturersController extends Controller * @param Request $request * @return \Illuminate\Http\RedirectResponse */ - public function store(Request $request) + public function store(ImageUploadRequest $request) { $manufacturer = new Manufacturer; @@ -72,6 +74,18 @@ class ManufacturersController extends Controller $manufacturer->support_email = $request->input('support_email'); + if ($request->file('image')) { + $image = $request->file('image'); + $file_name = str_random(25).".".$image->getClientOriginalExtension(); + $path = public_path('uploads/manufacturers/'.$file_name); + Image::make($image->getRealPath())->resize(200, null, function ($constraint) { + $constraint->aspectRatio(); + $constraint->upsize(); + })->save($path); + $manufacturer->image = $file_name; + } + + if ($manufacturer->save()) { return redirect()->route('manufacturers.index')->with('success', trans('admin/manufacturers/message.create.success')); @@ -124,6 +138,20 @@ class ManufacturersController extends Controller $manufacturer->support_phone = $request->input('support_phone'); $manufacturer->support_email = $request->input('support_email'); + if ($request->file('image')) { + $image = $request->file('image'); + $file_name = str_random(25).".".$image->getClientOriginalExtension(); + $path = public_path('uploads/manufacturers/'.$file_name); + Image::make($image->getRealPath())->resize(200, null, function ($constraint) { + $constraint->aspectRatio(); + $constraint->upsize(); + })->save($path); + $manufacturer->image = $file_name; + } elseif ($request->input('image_delete')=='1') { + $manufacturer->image = null; + } + + if ($manufacturer->save()) { return redirect()->route('manufacturers.index')->with('success', trans('admin/manufacturers/message.update.success')); } diff --git a/app/Http/Controllers/SuppliersController.php b/app/Http/Controllers/SuppliersController.php index 6e579180c2..8d6c4926c2 100755 --- a/app/Http/Controllers/SuppliersController.php +++ b/app/Http/Controllers/SuppliersController.php @@ -77,19 +77,18 @@ class SuppliersController extends Controller $supplier->url = $supplier->addhttp(request('url')); $supplier->user_id = Auth::id(); - if (Input::file('image')) { + if ($request->file('image')) { $image = $request->file('image'); $file_name = str_random(25).".".$image->getClientOriginalExtension(); $path = public_path('uploads/suppliers/'.$file_name); - Image::make($image->getRealPath())->resize(300, null, function ($constraint) { + Image::make($image->getRealPath())->resize(200, null, function ($constraint) { $constraint->aspectRatio(); $constraint->upsize(); })->save($path); - $supplier->image = $file_name; + $supplier->image = $file_name; } if ($supplier->save()) { - // Redirect to the nw supplier page return redirect()->route('suppliers.index')->with('success', trans('admin/suppliers/message.create.success')); } return redirect()->back()->withInput()->withErrors($supplier->getErrors()); @@ -160,16 +159,16 @@ class SuppliersController extends Controller $supplier->notes = request('notes'); - if (Input::file('image')) { + if ($request->file('image')) { $image = $request->file('image'); - $file_name = 'suppliers-'.str_random(25).".".$image->getClientOriginalExtension(); + $file_name = str_random(25).".".$image->getClientOriginalExtension(); $path = public_path('uploads/suppliers/'.$file_name); - Image::make($image->getRealPath())->resize(300, null, function ($constraint) { + Image::make($image->getRealPath())->resize(200, null, function ($constraint) { $constraint->aspectRatio(); $constraint->upsize(); })->save($path); $supplier->image = $file_name; - } elseif (request('image_delete') == 1) { + } elseif ($request->input('image_delete')=='1') { $supplier->image = null; } diff --git a/app/Http/Transformers/CategoriesTransformer.php b/app/Http/Transformers/CategoriesTransformer.php index 213793c90a..121e73803e 100644 --- a/app/Http/Transformers/CategoriesTransformer.php +++ b/app/Http/Transformers/CategoriesTransformer.php @@ -25,6 +25,7 @@ class CategoriesTransformer $array = [ 'id' => (int) $category->id, 'name' => e($category->name), + 'image' => ($category->image) ? e(url('/').'/uploads/categories/'.e($category->image)) : null, 'type' => e($category->category_type), 'eula' => ($category->getEula()) ? true : false, 'checkin_email' => ($category->checkin_email =='1') ? true : false, diff --git a/app/Http/Transformers/CompaniesTransformer.php b/app/Http/Transformers/CompaniesTransformer.php index fb94535976..107ed59b17 100644 --- a/app/Http/Transformers/CompaniesTransformer.php +++ b/app/Http/Transformers/CompaniesTransformer.php @@ -25,6 +25,7 @@ class CompaniesTransformer $array = [ 'id' => (int) $company->id, 'name' => e($company->name), + 'image' => ($company->image) ? e(url('/').'/uploads/companies/'.e($company->image)) : null, "created_at" => Helper::getFormattedDateObject($company->created_at, 'datetime'), "updated_at" => Helper::getFormattedDateObject($company->updated_at, 'datetime'), "assets_count" => (int) $company->assets_count, diff --git a/app/Http/Transformers/ComponentsTransformer.php b/app/Http/Transformers/ComponentsTransformer.php index f80124e1db..bb24cafb0b 100644 --- a/app/Http/Transformers/ComponentsTransformer.php +++ b/app/Http/Transformers/ComponentsTransformer.php @@ -22,7 +22,8 @@ class ComponentsTransformer $array = [ 'id' => (int) $component->id, 'name' => e($component->name), - 'serial_number' => e($component->serial), + 'image' => ($component->image) ? e(url('/').'/uploads/components/'.e($component->image)) : null, + 'serial_number' => ($component->serial) ? e($component->serial) : null, 'location' => ($component->location) ? [ 'id' => (int) $component->location->id, 'name' => e($component->location->name) diff --git a/app/Http/Transformers/ConsumablesTransformer.php b/app/Http/Transformers/ConsumablesTransformer.php index 44bfe73818..426cfb9d41 100644 --- a/app/Http/Transformers/ConsumablesTransformer.php +++ b/app/Http/Transformers/ConsumablesTransformer.php @@ -22,6 +22,8 @@ class ConsumablesTransformer { $array = [ 'id' => (int) $consumable->id, + 'name' => e($consumable->name), + 'image' => ($consumable->image) ? e(url('/').'/uploads/consumables/'.e($consumable->image)) : null, 'category' => ($consumable->category) ? ['id' => $consumable->category->id, 'name' => e($consumable->category->name)] : null, 'company' => ($consumable->company) ? ['id' => (int) $consumable->company->id, 'name' => e($consumable->company->name)] : null, 'item_no' => e($consumable->item_no), @@ -29,7 +31,6 @@ class ConsumablesTransformer 'manufacturer' => ($consumable->manufacturer) ? ['id' => (int) $consumable->manufacturer->id, 'name' => e($consumable->manufacturer->name)] : null, 'min_amt' => (int) $consumable->min_amt, 'model_number' => e($consumable->model_number), - 'name' => e($consumable->name), 'remaining' => $consumable->numRemaining(), 'order_number' => e($consumable->order_number), 'purchase_cost' => Helper::formatCurrencyOutput($consumable->purchase_cost), diff --git a/app/Http/Transformers/DepartmentsTranformer.php b/app/Http/Transformers/DepartmentsTranformer.php index 8531a3b8ef..00a8746e8b 100644 --- a/app/Http/Transformers/DepartmentsTranformer.php +++ b/app/Http/Transformers/DepartmentsTranformer.php @@ -25,6 +25,7 @@ class DepartmentsTransformer $array = [ 'id' => (int) $department->id, 'name' => e($department->name), + 'image' => ($department->image) ? e(url('/').'/uploads/departments/'.e($department->image)) : null, 'company' => ($department->company) ? [ 'id' => (int) $department->company->id, 'name'=> e($department->company->name) diff --git a/app/Http/Transformers/LocationsTransformer.php b/app/Http/Transformers/LocationsTransformer.php index 5dc8961dba..2822968623 100644 --- a/app/Http/Transformers/LocationsTransformer.php +++ b/app/Http/Transformers/LocationsTransformer.php @@ -33,6 +33,7 @@ class LocationsTransformer $array = [ 'id' => (int) $location->id, 'name' => e($location->name), + 'image' => ($location->image) ? e(url('/').'/uploads/locations/'.e($location->image)) : null, 'address' => e($location->address), 'city' => e($location->city), 'state' => e($location->state), diff --git a/app/Http/Transformers/ManufacturersTransformer.php b/app/Http/Transformers/ManufacturersTransformer.php index a1911a4468..93bcf36d24 100644 --- a/app/Http/Transformers/ManufacturersTransformer.php +++ b/app/Http/Transformers/ManufacturersTransformer.php @@ -26,6 +26,7 @@ class ManufacturersTransformer 'id' => (int) $manufacturer->id, 'name' => e($manufacturer->name), 'url' => e($manufacturer->url), + 'image' => ($manufacturer->image) ? e(url('/').'/uploads/manufacturers/'.e($manufacturer->image)) : null, 'support_url' => e($manufacturer->support_url), 'support_phone' => e($manufacturer->support_phone), 'support_email' => e($manufacturer->support_email), diff --git a/app/Http/Transformers/SuppliersTransformer.php b/app/Http/Transformers/SuppliersTransformer.php index 5802c87d86..bd3aac350b 100644 --- a/app/Http/Transformers/SuppliersTransformer.php +++ b/app/Http/Transformers/SuppliersTransformer.php @@ -25,6 +25,7 @@ class SuppliersTransformer $array = [ 'id' => (int) $supplier->id, 'name' => e($supplier->name), + 'image' => ($supplier->image) ? e(url('/').'/uploads/suppliers/'.e($supplier->image)) : null, 'address' => ($supplier->address) ? e($supplier->address) : null, 'address2' => ($supplier->address2) ? e($supplier->address2) : null, 'city' => ($supplier->city) ? e($supplier->city) : null, @@ -38,7 +39,6 @@ class SuppliersTransformer 'assets_count' => (int) $supplier->assets_count, 'accessories_count' => (int) $supplier->accessories_count, 'licenses_count' => (int) $supplier->licenses_count, - 'image' => ($supplier->image) ? url('/').'/uploads/suppliers/'.e($supplier->image) : null, 'notes' => ($supplier->notes) ? e($supplier->notes) : null, 'created_at' => Helper::getFormattedDateObject($supplier->created_at, 'datetime'), 'updated_at' => Helper::getFormattedDateObject($supplier->updated_at, 'datetime'), diff --git a/app/Models/Company.php b/app/Models/Company.php index fe621ff4fe..e3b23e8645 100644 --- a/app/Models/Company.php +++ b/app/Models/Company.php @@ -192,4 +192,20 @@ final class Company extends SnipeModel { return $this->hasMany(Component::class); } + + /** + * Query builder scope to search on text + * + * @param Illuminate\Database\Query\Builder $query Query builder instance + * @param text $search Search term + * + * @return Illuminate\Database\Query\Builder Modified query builder + */ + public function scopeTextSearch($query, $search) + { + + return $query->where(function ($query) use ($search) { + $query->where('name', 'LIKE', '%'.$search.'%'); + }); + } } diff --git a/app/Presenters/CategoryPresenter.php b/app/Presenters/CategoryPresenter.php index 42303f8e43..db864f43e7 100644 --- a/app/Presenters/CategoryPresenter.php +++ b/app/Presenters/CategoryPresenter.php @@ -32,6 +32,13 @@ class CategoryPresenter extends Presenter "title" => trans('general.name'), "visible" => true, "formatter" => 'categoriesLinkFormatter', + ],[ + "field" => "image", + "searchable" => false, + "sortable" => true, + "title" => trans('general.image'), + "visible" => true, + "formatter" => 'imageFormatter', ],[ "field" => "type", "searchable" => true, diff --git a/app/Presenters/CompanyPresenter.php b/app/Presenters/CompanyPresenter.php index caf1690dd6..233245ff7d 100644 --- a/app/Presenters/CompanyPresenter.php +++ b/app/Presenters/CompanyPresenter.php @@ -30,6 +30,14 @@ class CompanyPresenter extends Presenter "title" => trans('admin/companies/table.name'), "visible" => true, "formatter" => 'companiesLinkFormatter', + ],[ + "field" => "image", + "searchable" => false, + "sortable" => true, + "switchable" => true, + "title" => trans('general.image'), + "visible" => true, + "formatter" => 'imageFormatter', ],[ "field" => "users_count", "searchable" => false, diff --git a/app/Presenters/ComponentPresenter.php b/app/Presenters/ComponentPresenter.php index 1a62db667e..6983b73d11 100644 --- a/app/Presenters/ComponentPresenter.php +++ b/app/Presenters/ComponentPresenter.php @@ -42,6 +42,14 @@ class ComponentPresenter extends Presenter "title" => trans('general.name'), "visible" => true, "formatter" => 'componentsLinkFormatter', + ], [ + "field" => "image", + "searchable" => false, + "sortable" => true, + "switchable" => true, + "title" => trans('general.image'), + "visible" => false, + "formatter" => 'imageFormatter', ], [ "field" => "category", "searchable" => true, diff --git a/app/Presenters/ConsumablePresenter.php b/app/Presenters/ConsumablePresenter.php index 2b542912af..2089771cc0 100644 --- a/app/Presenters/ConsumablePresenter.php +++ b/app/Presenters/ConsumablePresenter.php @@ -41,6 +41,15 @@ class ConsumablePresenter extends Presenter "title" => trans('general.name'), "visible" => true, "formatter" => 'consumablesLinkFormatter', + ], + [ + "field" => "image", + "searchable" => false, + "sortable" => true, + "switchable" => true, + "title" => trans('general.image'), + "visible" => false, + "formatter" => 'imageFormatter', ], [ "field" => "category", "searchable" => true, diff --git a/app/Presenters/ManufacturerPresenter.php b/app/Presenters/ManufacturerPresenter.php index 60c94d005a..e07e9cff9c 100644 --- a/app/Presenters/ManufacturerPresenter.php +++ b/app/Presenters/ManufacturerPresenter.php @@ -35,6 +35,15 @@ class ManufacturerPresenter extends Presenter "visible" => true, "formatter" => "manufacturersLinkFormatter" ], + [ + "field" => "image", + "searchable" => false, + "sortable" => true, + "switchable" => true, + "title" => trans('general.image'), + "visible" => true, + "formatter" => "imageFormatter" + ], [ "field" => "url", "searchable" => true, @@ -44,7 +53,6 @@ class ManufacturerPresenter extends Presenter "visible" => true, "formatter" => "linkFormatter" ], - [ "field" => "support_url", "searchable" => true, diff --git a/database/migrations/2017_10_25_202930_add_images_uploads_to_locations_manufacturers_etc.php b/database/migrations/2017_10_25_202930_add_images_uploads_to_locations_manufacturers_etc.php new file mode 100644 index 0000000000..f6775a564a --- /dev/null +++ b/database/migrations/2017_10_25_202930_add_images_uploads_to_locations_manufacturers_etc.php @@ -0,0 +1,71 @@ +string('image')->nullable()->default(null); + }); + Schema::table('companies', function (Blueprint $table) { + $table->string('image')->nullable()->default(null); + }); + Schema::table('components', function (Blueprint $table) { + $table->string('image')->nullable()->default(null); + }); + Schema::table('consumables', function (Blueprint $table) { + $table->string('image')->nullable()->default(null); + }); + Schema::table('departments', function (Blueprint $table) { + $table->string('image')->nullable()->default(null); + }); + Schema::table('locations', function (Blueprint $table) { + $table->string('image')->nullable()->default(null); + }); + Schema::table('manufacturers', function (Blueprint $table) { + $table->string('image')->nullable()->default(null); + }); + + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('categories', function (Blueprint $table) { + $table->dropColumn('image'); + }); + Schema::table('companies', function (Blueprint $table) { + $table->dropColumn('image'); + }); + Schema::table('components', function (Blueprint $table) { + $table->dropColumn('image'); + }); + Schema::table('consumables', function (Blueprint $table) { + $table->dropColumn('image'); + }); + Schema::table('departments', function (Blueprint $table) { + $table->dropColumn('image'); + }); + Schema::table('locations', function (Blueprint $table) { + $table->dropColumn('image'); + }); + Schema::table('manufacturers', function (Blueprint $table) { + $table->dropColumn('image'); + }); + + + } +} diff --git a/public/uploads/categories/.gitignore b/public/uploads/categories/.gitignore new file mode 100755 index 0000000000..f935021a8f --- /dev/null +++ b/public/uploads/categories/.gitignore @@ -0,0 +1 @@ +!.gitignore diff --git a/public/uploads/companies/.gitignore b/public/uploads/companies/.gitignore new file mode 100755 index 0000000000..f935021a8f --- /dev/null +++ b/public/uploads/companies/.gitignore @@ -0,0 +1 @@ +!.gitignore diff --git a/public/uploads/companies/LNwfCJ5P4WtaViO1XYbkWgX8D.jpg b/public/uploads/companies/LNwfCJ5P4WtaViO1XYbkWgX8D.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3aae4799f9f16fdea0c6eaf70f30039bb0f85d1f GIT binary patch literal 20709 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 'Accessories', - 'activated' => 'Activated', + 'activated' => 'Activated', 'accessory' => 'Accessory', - 'accessory_report' => 'Accessory Report', + 'accessory_report' => 'Accessory Report', 'action' => 'Action', 'activity_report' => 'Activity Report', 'address' => 'Address', 'admin' => 'Admin', - 'add_seats' => 'Added seats', + 'add_seats' => 'Added seats', 'all_assets' => 'All Assets', 'all' => 'All', 'archived' => 'Archived', @@ -40,9 +40,9 @@ 'checkout' => 'Checkout', 'city' => 'City', 'click_here' => 'Click here', - 'companies' => 'Companies', + 'companies' => 'Companies', 'company' => 'Company', - 'component' => 'Component', + 'component' => 'Component', 'components' => 'Components', 'complete' => 'Complete', 'consumable' => 'Consumable', @@ -58,10 +58,10 @@ 'custom_report' => 'Custom Asset Report', 'dashboard' => 'Dashboard', 'days' => 'days', - 'days_to_next_audit' => 'Days to Next Audit', + 'days_to_next_audit' => 'Days to Next Audit', 'date' => 'Date', 'debug_warning' => 'Warning!', - 'debug_warning_text' => 'This application is running in production mode with debugging enabled. This can expose sensitive data if your application is accessible to the outside world. Disable debug mode by setting the APP_DEBUG value in your .env file to false.', + 'debug_warning_text' => 'This application is running in production mode with debugging enabled. This can expose sensitive data if your application is accessible to the outside world. Disable debug mode by setting the APP_DEBUG value in your .env file to false.', 'delete' => 'Delete', 'deleted' => 'Deleted', 'delete_seats' => 'Deleted Seats', @@ -89,6 +89,7 @@ 'history' => 'History', 'history_for' => 'History for', 'id' => 'ID', + 'image' => 'Image', 'image_delete' => 'Delete Image', 'image_upload' => 'Upload Image', 'import' => 'Import', diff --git a/resources/views/categories/edit.blade.php b/resources/views/categories/edit.blade.php index 6371db1950..ef995c9d0d 100755 --- a/resources/views/categories/edit.blade.php +++ b/resources/views/categories/edit.blade.php @@ -61,11 +61,33 @@ {{ trans('admin/categories/general.checkin_email') }} + + +@if ($item->image) +
+ +
+ {{ Form::checkbox('image_delete') }} + + {!! $errors->first('image_delete', ':message') !!} +
+
+@endif + +
+ +
+ {{ Form::file('image') }} + {!! $errors->first('image', ':message') !!} +
+
+ @stop @section('content') @parent + @if ($snipeSettings->default_eula_text!='') @endif + + + @stop diff --git a/resources/views/companies/edit.blade.php b/resources/views/companies/edit.blade.php index daa3eba9e8..46d55f6532 100644 --- a/resources/views/companies/edit.blade.php +++ b/resources/views/companies/edit.blade.php @@ -9,4 +9,25 @@ {{-- Page content --}} @section('inputFields') @include ('partials.forms.edit.name', ['translated_name' => trans('admin/companies/table.name')]) + + +@if ($item->image) +
+ +
+ {{ Form::checkbox('image_delete') }} + + {!! $errors->first('image_delete', ':message') !!} +
+
+@endif + +
+ +
+ {{ Form::file('image') }} + {!! $errors->first('image', ':message') !!} +
+
+ @stop diff --git a/resources/views/components/edit.blade.php b/resources/views/components/edit.blade.php index 84b7bb3e2b..24f94e9b47 100644 --- a/resources/views/components/edit.blade.php +++ b/resources/views/components/edit.blade.php @@ -21,4 +21,24 @@ @include ('partials.forms.edit.purchase_date') @include ('partials.forms.edit.purchase_cost') + +@if ($item->image) +
+ +
+ {{ Form::checkbox('image_delete') }} + + {!! $errors->first('image_delete', ':message') !!} +
+
+@endif + +
+ +
+ {{ Form::file('image') }} + {!! $errors->first('image', ':message') !!} +
+
+ @stop diff --git a/resources/views/components/view.blade.php b/resources/views/components/view.blade.php index e47c6fe2cb..57f2eb7141 100644 --- a/resources/views/components/view.blade.php +++ b/resources/views/components/view.blade.php @@ -71,6 +71,12 @@
+ @if ($component->image!='') +
+ +
+ @endif + @if ($component->serial!='')
{{ trans('admin/hardware/form.serial') }}: {{ $component->serial }}
diff --git a/resources/views/consumables/edit.blade.php b/resources/views/consumables/edit.blade.php index 54d5d5c27f..48f5d38c09 100644 --- a/resources/views/consumables/edit.blade.php +++ b/resources/views/consumables/edit.blade.php @@ -21,4 +21,23 @@ @include ('partials.forms.edit.quantity') @include ('partials.forms.edit.minimum_quantity') + +@if ($item->image) +
+ +
+ {{ Form::checkbox('image_delete') }} + + {!! $errors->first('image_delete', ':message') !!} +
+
+@endif + +
+ +
+ {{ Form::file('image') }} + {!! $errors->first('image', ':message') !!} +
+
@stop diff --git a/resources/views/consumables/view.blade.php b/resources/views/consumables/view.blade.php index 820f69dc51..f540d600d9 100644 --- a/resources/views/consumables/view.blade.php +++ b/resources/views/consumables/view.blade.php @@ -57,6 +57,12 @@
+ @if ($consumable->image!='') +
+ +
+ @endif +

{{ trans('admin/consumables/general.about_consumables_title') }}

{{ trans('admin/consumables/general.about_consumables_text') }}

diff --git a/resources/views/departments/edit.blade.php b/resources/views/departments/edit.blade.php index 7412a8d126..7e3430044a 100644 --- a/resources/views/departments/edit.blade.php +++ b/resources/views/departments/edit.blade.php @@ -32,7 +32,25 @@
+ + @if ($item->image) +
+ +
+ {{ Form::checkbox('image_delete') }} + + {!! $errors->first('image_delete', ':message') !!} +
+
+ @endif +
+ +
+ {{ Form::file('image') }} + {!! $errors->first('image', ':message') !!} +
+
@stop diff --git a/resources/views/departments/index.blade.php b/resources/views/departments/index.blade.php index 4f9c884e49..bc5c0fb57c 100644 --- a/resources/views/departments/index.blade.php +++ b/resources/views/departments/index.blade.php @@ -29,8 +29,8 @@ {{ trans('general.id') }} {{ trans('general.company') }} - {{ trans('admin/departments/table.name') }} + {{ trans('general.image') }} {{ trans('admin/departments/table.manager') }} {{ trans('general.users') }} {{ trans('admin/departments/table.location') }} diff --git a/resources/views/locations/edit.blade.php b/resources/views/locations/edit.blade.php index ee65d69339..054a8d2ed5 100755 --- a/resources/views/locations/edit.blade.php +++ b/resources/views/locations/edit.blade.php @@ -58,6 +58,25 @@ @endif + +@if ($item->image) +
+ +
+ {{ Form::checkbox('image_delete') }} + + {!! $errors->first('image_delete', ':message') !!} +
+
+@endif + +
+ +
+ {{ Form::file('image') }} + {!! $errors->first('image', ':message') !!} +
+
@stop @if (!$item->id) diff --git a/resources/views/locations/index.blade.php b/resources/views/locations/index.blade.php index 98adac48c6..d6b5212fae 100755 --- a/resources/views/locations/index.blade.php +++ b/resources/views/locations/index.blade.php @@ -29,10 +29,11 @@ {{ trans('general.id') }} {{ trans('admin/locations/table.name') }} + {{ trans('general.image') }} {{ trans('admin/locations/table.parent') }} {{ trans('admin/locations/table.assets_rtd') }} {{ trans('admin/locations/table.assets_checkedout') }} - {{ App\Models\Setting::first()->default_currency }} + {{ trans('general.currency') }} {{ trans('admin/locations/table.address') }} {{ trans('admin/locations/table.city') }} diff --git a/resources/views/manufacturers/edit.blade.php b/resources/views/manufacturers/edit.blade.php index 895b45e554..69d0522256 100755 --- a/resources/views/manufacturers/edit.blade.php +++ b/resources/views/manufacturers/edit.blade.php @@ -50,4 +50,25 @@ + + @if ($item->image) +
+ +
+ {{ Form::checkbox('image_delete') }} + + {!! $errors->first('image_delete', ':message') !!} +
+
+ @endif + +
+ +
+ {{ Form::file('image') }} + {!! $errors->first('image', ':message') !!} +
+
+ + @stop diff --git a/resources/views/suppliers/index.blade.php b/resources/views/suppliers/index.blade.php index 7a9b3f0e3c..276a91f023 100755 --- a/resources/views/suppliers/index.blade.php +++ b/resources/views/suppliers/index.blade.php @@ -30,7 +30,7 @@ {{ trans('admin/suppliers/table.id') }} - Image + {{ trans('general.image') }} {{ trans('admin/suppliers/table.name') }} {{ trans('admin/suppliers/table.address') }} {{ trans('admin/suppliers/table.contact') }}