From bd0498aa69c26bcfbd48551004f62c891332294c Mon Sep 17 00:00:00 2001 From: snipe Date: Wed, 27 Sep 2017 12:58:08 -0700 Subject: [PATCH 01/16] Fixes #4016 - signature file missing from history tab --- app/Http/Transformers/ActionlogsTransformer.php | 1 + resources/views/hardware/view.blade.php | 3 +++ resources/views/partials/bootstrap-table.blade.php | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/Http/Transformers/ActionlogsTransformer.php b/app/Http/Transformers/ActionlogsTransformer.php index 6b81ce33c..692ea5eec 100644 --- a/app/Http/Transformers/ActionlogsTransformer.php +++ b/app/Http/Transformers/ActionlogsTransformer.php @@ -53,6 +53,7 @@ class ActionlogsTransformer ] : null, 'note' => e($actionlog->note), + 'signature_file' => ($actionlog->accept_signature) ? $actionlog->accept_signature : null, ]; diff --git a/resources/views/hardware/view.blade.php b/resources/views/hardware/view.blade.php index fcf2c8552..2e8617818 100755 --- a/resources/views/hardware/view.blade.php +++ b/resources/views/hardware/view.blade.php @@ -603,6 +603,9 @@ {{ trans('general.item') }} {{ trans('general.target') }} {{ trans('general.notes') }} + @if ($snipeSettings->require_accept_signature=='1') + {{ trans('general.signature') }} + @endif diff --git a/resources/views/partials/bootstrap-table.blade.php b/resources/views/partials/bootstrap-table.blade.php index e579c666c..672dd39f9 100644 --- a/resources/views/partials/bootstrap-table.blade.php +++ b/resources/views/partials/bootstrap-table.blade.php @@ -358,7 +358,7 @@ $('.snipe-table').bootstrapTable({ function imageFormatter(value, row) { if (value) { - return ''; + return ''; } } From ef8c1abf28ddb579fc801cd71473b608ce25d677 Mon Sep 17 00:00:00 2001 From: snipe Date: Wed, 27 Sep 2017 14:50:17 -0700 Subject: [PATCH 02/16] Fixes #3113 and #4040 --- app/Models/SnipeModel.php | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/app/Models/SnipeModel.php b/app/Models/SnipeModel.php index 43cf0cfc9..2b2b49623 100644 --- a/app/Models/SnipeModel.php +++ b/app/Models/SnipeModel.php @@ -77,6 +77,24 @@ class SnipeModel extends Model return; } + public function setMinAmtAttribute($value) + { + if ($value == '') { + $value = null; + } + $this->attributes['min_amt'] = $value; + return; + } + + public function setParentIdAttribute($value) + { + if ($value == '') { + $value = null; + } + $this->attributes['parent_id'] = $value; + return; + } + // public function getDisplayNameAttribute() { From e91a537552edda504fa5b438b4b1de7ee3457929 Mon Sep 17 00:00:00 2001 From: snipe Date: Wed, 27 Sep 2017 14:50:48 -0700 Subject: [PATCH 03/16] Use more modern Request handler --- app/Http/Controllers/ComponentsController.php | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/app/Http/Controllers/ComponentsController.php b/app/Http/Controllers/ComponentsController.php index ca09711fd..80d30f2b0 100644 --- a/app/Http/Controllers/ComponentsController.php +++ b/app/Http/Controllers/ComponentsController.php @@ -74,20 +74,20 @@ class ComponentsController extends Controller * @since [v3.0] * @return \Illuminate\Http\RedirectResponse */ - public function store() + public function store(Request $request) { $this->authorize('create', Component::class); $component = new Component(); - $component->name = Input::get('name'); - $component->category_id = Input::get('category_id'); - $component->location_id = Input::get('location_id'); - $component->company_id = Company::getIdForCurrentUser(Input::get('company_id')); - $component->order_number = Input::get('order_number'); - $component->min_amt = Input::get('min_amt'); - $component->serial = Input::get('serial'); - $component->purchase_date = Input::get('purchase_date'); - $component->purchase_cost = request('purchase_cost'); - $component->qty = Input::get('qty'); + $component->name = $request->input('name'); + $component->category_id = $request->input('category_id'); + $component->location_id = $request->input('location_id'); + $component->company_id = Company::getIdForCurrentUser($request->input('company_id')); + $component->order_number = $request->input('order_number', null); + $component->min_amt = $request->input('min_amt', null); + $component->serial = $request->input('serial', null); + $component->purchase_date = $request->input('purchase_date', null); + $component->purchase_cost = $request->input('purchase_cost', null); + $component->qty = $request->input('qty'); $component->user_id = Auth::id(); if ($component->save()) { From 73e788b94b77278e22cb40e53216cc777a8b84c0 Mon Sep 17 00:00:00 2001 From: snipe Date: Wed, 27 Sep 2017 14:50:56 -0700 Subject: [PATCH 04/16] Make min_amt fillable --- app/Models/Component.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Models/Component.php b/app/Models/Component.php index 9dcce2f9a..a59448db9 100644 --- a/app/Models/Component.php +++ b/app/Models/Component.php @@ -53,6 +53,7 @@ class Component extends SnipeModel 'name', 'purchase_cost', 'purchase_date', + 'min_amt', 'qty', ]; From 0ab9bc1db828513675dff96dfbeaee6aa7616c15 Mon Sep 17 00:00:00 2001 From: snipe Date: Wed, 27 Sep 2017 15:18:05 -0700 Subject: [PATCH 05/16] Added normalization midddleware, removed --- app/Http/Kernel.php | 1 + app/Models/SnipeModel.php | 72 --------------------------------------- 2 files changed, 1 insertion(+), 72 deletions(-) diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index d6d3b3399..44d6d521b 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -23,6 +23,7 @@ class Kernel extends HttpKernel \App\Http\Middleware\CheckForSetup::class, \Fideloper\Proxy\TrustProxies::class, \App\Http\Middleware\CheckForDebug::class, + \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, ]; /** diff --git a/app/Models/SnipeModel.php b/app/Models/SnipeModel.php index 2b2b49623..dbfe73f5c 100644 --- a/app/Models/SnipeModel.php +++ b/app/Models/SnipeModel.php @@ -8,15 +8,6 @@ use Illuminate\Database\Eloquent\Model; class SnipeModel extends Model { - // Setters that are appropriate across multiple models. - public function setPurchaseDateAttribute($value) - { - if ($value == '') { - $value = null; - } - $this->attributes['purchase_date'] = $value; - return; - } /** * @param $value @@ -31,69 +22,6 @@ class SnipeModel extends Model return; } - public function setLocationIdAttribute($value) - { - if ($value == '') { - $value = null; - } - $this->attributes['location_id'] = $value; - return; - } - - public function setCategoryIdAttribute($value) - { - if ($value == '') { - $value = null; - } - $this->attributes['category_id'] = $value; - // dd($this->attributes); - return; - } - - public function setSupplierIdAttribute($value) - { - if ($value == '') { - $value = null; - } - $this->attributes['supplier_id'] = $value; - return; - } - - public function setDepreciationIdAttribute($value) - { - if ($value == '') { - $value = null; - } - $this->attributes['depreciation_id'] = $value; - return; - } - - public function setManufacturerIdAttribute($value) - { - if ($value == '') { - $value = null; - } - $this->attributes['manufacturer_id'] = $value; - return; - } - - public function setMinAmtAttribute($value) - { - if ($value == '') { - $value = null; - } - $this->attributes['min_amt'] = $value; - return; - } - - public function setParentIdAttribute($value) - { - if ($value == '') { - $value = null; - } - $this->attributes['parent_id'] = $value; - return; - } // public function getDisplayNameAttribute() From ecf041fa1060125233513c430cd8d562bf720fa6 Mon Sep 17 00:00:00 2001 From: snipe Date: Wed, 27 Sep 2017 15:18:29 -0700 Subject: [PATCH 06/16] Fixes #4043 - standardize groups API response --- app/Http/Controllers/Api/GroupsController.php | 2 +- app/Http/Transformers/GroupsTransformer.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Api/GroupsController.php b/app/Http/Controllers/Api/GroupsController.php index a821b57ce..dc19f1750 100644 --- a/app/Http/Controllers/Api/GroupsController.php +++ b/app/Http/Controllers/Api/GroupsController.php @@ -73,7 +73,7 @@ class GroupsController extends Controller { $this->authorize('view', Group::class); $group = Group::findOrFail($id); - return $group; + return (new GroupsTransformer)->transformGroup($group); } diff --git a/app/Http/Transformers/GroupsTransformer.php b/app/Http/Transformers/GroupsTransformer.php index a40a23bf0..3cec01f99 100644 --- a/app/Http/Transformers/GroupsTransformer.php +++ b/app/Http/Transformers/GroupsTransformer.php @@ -23,7 +23,7 @@ class GroupsTransformer $array = [ 'id' => (int) $group->id, 'name' => e($group->name), - 'permissions' => $group->permissions, + 'permissions' => json_decode($group->permissions), 'users_count' => (int) $group->users_count, 'created_at' => Helper::getFormattedDateObject($group->created_at, 'datetime'), 'updated_at' => Helper::getFormattedDateObject($group->updated_at, 'datetime'), From d1112bbc996aeedbb8d1e3487434a514f48a6f60 Mon Sep 17 00:00:00 2001 From: snipe Date: Wed, 27 Sep 2017 15:28:02 -0700 Subject: [PATCH 07/16] Fix created_at date display for groups index --- resources/views/groups/index.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/groups/index.blade.php b/resources/views/groups/index.blade.php index 744b578f7..9ba0dbf6b 100755 --- a/resources/views/groups/index.blade.php +++ b/resources/views/groups/index.blade.php @@ -32,7 +32,7 @@ {{ trans('general.id') }} {{ trans('admin/groups/table.name') }} {{ trans('admin/groups/table.users') }} - {{ trans('general.created_at') }} + {{ trans('general.created_at') }} {{ trans('table.actions') }} From 5410dc4255083adc81329e95812f2cb9370516da Mon Sep 17 00:00:00 2001 From: snipe Date: Wed, 27 Sep 2017 15:30:20 -0700 Subject: [PATCH 08/16] Fixed link to contributing docs in readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 296c1ff03..f737d050a 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,7 @@ This project follows the [all-contributors](https://github.com/kentcdodds/all-co ### Contributing -Please see the documentation on [contributing and developing for Snipe-IT](https://snipe-it.readme.io/docs/contributing). +Please see the documentation on [contributing and developing for Snipe-IT](https://snipe-it.readme.io/docs/contributing-overview). Please note that this project is released with a [Contributor Code of Conduct](CODE_OF_CONDUCT.md). By participating in this project you agree to abide by its terms. From ec8a3d2e56c87a24d41af656dc2eb3900c38a63c Mon Sep 17 00:00:00 2001 From: snipe Date: Wed, 27 Sep 2017 16:02:29 -0700 Subject: [PATCH 09/16] Fixes #4027 - proper redirect on fieldset delete --- .../Controllers/CustomFieldsetsController.php | 43 ++++++++++++------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/app/Http/Controllers/CustomFieldsetsController.php b/app/Http/Controllers/CustomFieldsetsController.php index 9ff80e5e1..4ec4a90e7 100644 --- a/app/Http/Controllers/CustomFieldsetsController.php +++ b/app/Http/Controllers/CustomFieldsetsController.php @@ -37,19 +37,25 @@ class CustomFieldsetsController extends Controller public function show($id) { $cfset = CustomFieldset::with('fields')->where('id', '=', $id)->orderBy('id', 'ASC')->first(); - $custom_fields_list = ["" => "Add New Field to Fieldset"] + CustomField::pluck("name", "id")->toArray(); - $maxid = 0; - foreach ($cfset->fields() as $field) { - if ($field->pivot->order > $maxid) { - $maxid=$field->pivot->order; - } - if (isset($custom_fields_list[$field->id])) { - unset($custom_fields_list[$field->id]); + if ($cfset) { + $custom_fields_list = ["" => "Add New Field to Fieldset"] + CustomField::pluck("name", "id")->toArray(); + + $maxid = 0; + foreach ($cfset->fields() as $field) { + if ($field->pivot->order > $maxid) { + $maxid=$field->pivot->order; + } + if (isset($custom_fields_list[$field->id])) { + unset($custom_fields_list[$field->id]); + } } + + return view("custom_fields.fieldsets.view")->with("custom_fieldset", $cfset)->with("maxid", $maxid+1)->with("custom_fields_list", $custom_fields_list); } - return view("custom_fields.fieldsets.view")->with("custom_fieldset", $cfset)->with("maxid", $maxid+1)->with("custom_fields_list", $custom_fields_list); + return redirect()->route("fields.index")->with("error", trans('admin/custom_fields/message.fieldset.does_not_exist')); + } @@ -133,16 +139,21 @@ class CustomFieldsetsController extends Controller */ public function destroy($id) { - // $fieldset = CustomFieldset::find($id); - $models = AssetModel::where("fieldset_id", "=", $id); - if ($models->count() == 0) { - $fieldset->delete(); - return redirect()->route("fields.show")->with("success", trans('admin/custom_fields/message.fieldset.delete.success')); - } else { - return redirect()->route("fields.show")->with("error", trans('admin/custom_fields/message.fieldset.delete.in_use')); + if ($fieldset) { + $models = AssetModel::where("fieldset_id", "=", $id); + if ($models->count() == 0) { + $fieldset->delete(); + return redirect()->route("fields.index")->with("success", trans('admin/custom_fields/message.fieldset.delete.success')); + } else { + return redirect()->route("fields.index")->with("error", trans('admin/custom_fields/message.fieldset.delete.in_use')); + } } + + return redirect()->route("fields.index")->with("error", trans('admin/custom_fields/message.fieldset.does_not_exist')); + + } From d844734b6ce2e378719cb7206736dc8613b82700 Mon Sep 17 00:00:00 2001 From: snipe Date: Wed, 27 Sep 2017 16:22:02 -0700 Subject: [PATCH 10/16] Use named login route --- resources/views/auth/login.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php index 8e734fd45..5fc935056 100755 --- a/resources/views/auth/login.blade.php +++ b/resources/views/auth/login.blade.php @@ -59,7 +59,7 @@ From ea9a5021527d8b9b7972a7b928c020d3426ca8a6 Mon Sep 17 00:00:00 2001 From: snipe Date: Wed, 27 Sep 2017 16:23:01 -0700 Subject: [PATCH 11/16] Added empty regsitration controller MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When using the default Laravel auth routes, it expects a registration controller, even though we don’t have a concept of registration. This blank controller just prevents route caching from throwing errors. --- app/Http/Controllers/Auth/RegisterController.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 app/Http/Controllers/Auth/RegisterController.php diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php new file mode 100644 index 000000000..364948043 --- /dev/null +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -0,0 +1,15 @@ +middleware('guest'); + } +} From fc96fa756e4bc3914321c5ec29c678c54ba479b9 Mon Sep 17 00:00:00 2001 From: snipe Date: Wed, 27 Sep 2017 16:23:21 -0700 Subject: [PATCH 12/16] Fix redirect default on password reset --- app/Http/Controllers/Auth/ResetPasswordController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Auth/ResetPasswordController.php b/app/Http/Controllers/Auth/ResetPasswordController.php index cf726eecd..2c863aa6b 100644 --- a/app/Http/Controllers/Auth/ResetPasswordController.php +++ b/app/Http/Controllers/Auth/ResetPasswordController.php @@ -25,7 +25,7 @@ class ResetPasswordController extends Controller * * @var string */ - protected $redirectTo = '/home'; + protected $redirectTo = '/'; /** * Create a new controller instance. From 13dcdf41b8b54019d26f20fcaeab5559509b5e76 Mon Sep 17 00:00:00 2001 From: snipe Date: Wed, 27 Sep 2017 16:32:37 -0700 Subject: [PATCH 13/16] Fixes #4045 - missing back button --- resources/views/groups/index.blade.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/resources/views/groups/index.blade.php b/resources/views/groups/index.blade.php index 9ba0dbf6b..dc665ea71 100755 --- a/resources/views/groups/index.blade.php +++ b/resources/views/groups/index.blade.php @@ -7,7 +7,8 @@ @stop @section('header_right') - {{ trans('general.create') }} + {{ trans('general.create') }} +{{ trans('general.back') }} @stop From 979ecf961d3cd120855128b985f9fe66258504c4 Mon Sep 17 00:00:00 2001 From: snipe Date: Wed, 27 Sep 2017 16:33:51 -0700 Subject: [PATCH 14/16] Added back button to oauth page --- resources/views/settings/api.blade.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/resources/views/settings/api.blade.php b/resources/views/settings/api.blade.php index 6de71583e..2d5d7a9dd 100644 --- a/resources/views/settings/api.blade.php +++ b/resources/views/settings/api.blade.php @@ -6,6 +6,10 @@ @parent @stop +@section('header_right') + {{ trans('general.back') }} +@stop + {{-- Page content --}} @section('content') @if (!config('app.lock_passwords')) From ac83dba2bb885a1e8a28a1637250cd99dc262458 Mon Sep 17 00:00:00 2001 From: snipe Date: Wed, 27 Sep 2017 16:35:54 -0700 Subject: [PATCH 15/16] Fixes #4034 - save login note --- app/Http/Controllers/SettingsController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/SettingsController.php b/app/Http/Controllers/SettingsController.php index 672c5488f..c406f8371 100755 --- a/app/Http/Controllers/SettingsController.php +++ b/app/Http/Controllers/SettingsController.php @@ -338,7 +338,7 @@ class SettingsController extends Controller $setting->email_format = $request->input('email_format'); $setting->username_format = $request->input('username_format'); $setting->require_accept_signature = $request->input('require_accept_signature'); - if (config('app.lock_passwords')) { + if (!config('app.lock_passwords')) { $setting->login_note = $request->input('login_note'); } From 0fb4ff77f45687f8751c0ced62a05f6878a0f2f6 Mon Sep 17 00:00:00 2001 From: snipe Date: Wed, 27 Sep 2017 16:39:20 -0700 Subject: [PATCH 16/16] Restoring older SnipeModel attribute setters In case needed by API - needs investigation --- app/Models/SnipeModel.php | 73 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/app/Models/SnipeModel.php b/app/Models/SnipeModel.php index dbfe73f5c..e650cb662 100644 --- a/app/Models/SnipeModel.php +++ b/app/Models/SnipeModel.php @@ -8,6 +8,15 @@ use Illuminate\Database\Eloquent\Model; class SnipeModel extends Model { + // Setters that are appropriate across multiple models. + public function setPurchaseDateAttribute($value) + { + if ($value == '') { + $value = null; + } + $this->attributes['purchase_date'] = $value; + return; + } /** * @param $value @@ -22,6 +31,70 @@ class SnipeModel extends Model return; } + public function setLocationIdAttribute($value) + { + if ($value == '') { + $value = null; + } + $this->attributes['location_id'] = $value; + return; + } + + public function setCategoryIdAttribute($value) + { + if ($value == '') { + $value = null; + } + $this->attributes['category_id'] = $value; + // dd($this->attributes); + return; + } + + public function setSupplierIdAttribute($value) + { + if ($value == '') { + $value = null; + } + $this->attributes['supplier_id'] = $value; + return; + } + + public function setDepreciationIdAttribute($value) + { + if ($value == '') { + $value = null; + } + $this->attributes['depreciation_id'] = $value; + return; + } + + public function setManufacturerIdAttribute($value) + { + if ($value == '') { + $value = null; + } + $this->attributes['manufacturer_id'] = $value; + return; + } + + public function setMinAmtAttribute($value) + { + if ($value == '') { + $value = null; + } + $this->attributes['min_amt'] = $value; + return; + } + + public function setParentIdAttribute($value) + { + if ($value == '') { + $value = null; + } + $this->attributes['parent_id'] = $value; + return; + } + // public function getDisplayNameAttribute()