diff --git a/app/Http/Controllers/Api/ManufacturersController.php b/app/Http/Controllers/Api/ManufacturersController.php index 30e36a7d8f..40f19b2395 100644 --- a/app/Http/Controllers/Api/ManufacturersController.php +++ b/app/Http/Controllers/Api/ManufacturersController.php @@ -7,6 +7,7 @@ use App\Http\Controllers\Controller; use App\Helpers\Helper; use App\Models\Manufacturer; use App\Http\Transformers\DatatablesTransformer; +use App\Http\Transformers\ManufacturersTransformer; class ManufacturersController extends Controller { @@ -20,10 +21,10 @@ class ManufacturersController extends Controller public function index(Request $request) { $this->authorize('view', Manufacturer::class); - $allowed_columns = ['id','name']; + $allowed_columns = ['id','name','url','support_url','support_email','support_phone','created_at','updated_at']; $manufacturers = Manufacturer::select( - array('id','name') + array('id','name','url','support_url','support_email','support_phone','created_at','updated_at') )->withCount('assets')->withCount('licenses')->withCount('consumables')->withCount('accessories'); @@ -39,8 +40,7 @@ class ManufacturersController extends Controller $total = $manufacturers->count(); $manufacturers = $manufacturers->skip($offset)->take($limit)->get(); - return (new DatatablesTransformer)->transformDatatables($manufacturers, $total); - return $manufacturers; + return (new ManufacturersTransformer)->transformManufacturers($manufacturers, $total); } diff --git a/app/Http/Controllers/ManufacturersController.php b/app/Http/Controllers/ManufacturersController.php index 81579ce074..9cc5573fc4 100755 --- a/app/Http/Controllers/ManufacturersController.php +++ b/app/Http/Controllers/ManufacturersController.php @@ -27,13 +27,12 @@ class ManufacturersController extends Controller * the content for the manufacturers listing, which is generated in getDatatable. * * @author [A. Gianotto] [] - * @see ManufacturersController::getDatatable() method that generates the JSON response + * @see Api\ManufacturersController::index() method that generates the JSON response * @since [v1.0] * @return \Illuminate\Contracts\View\View */ public function index() { - // Show the page return View::make('manufacturers/index', compact('manufacturers')); } @@ -42,7 +41,7 @@ class ManufacturersController extends Controller * Returns a view that displays a form to create a new manufacturer. * * @author [A. Gianotto] [] - * @see ManufacturersController::postCreate() + * @see ManufacturersController::store() * @since [v1.0] * @return \Illuminate\Contracts\View\View */ @@ -56,16 +55,23 @@ class ManufacturersController extends Controller * Validates and stores the data for a new manufacturer. * * @author [A. Gianotto] [] - * @see ManufacturersController::postCreate() + * @see ManufacturersController::create() * @since [v1.0] * @param Request $request * @return \Illuminate\Http\RedirectResponse */ public function store(Request $request) { + $manufacturer = new Manufacturer; $manufacturer->name = $request->input('name'); - $manufacturer->user_id = Auth::id(); + $manufacturer->user_id = Auth::user()->id; + $manufacturer->url = $request->input('url'); + $manufacturer->support_url = $request->input('support_url'); + $manufacturer->support_phone = $request->input('support_phone'); + $manufacturer->support_email = $request->input('support_email'); + + if ($manufacturer->save()) { return redirect()->route('manufacturers.index')->with('success', trans('admin/manufacturers/message.create.success')); @@ -77,16 +83,15 @@ class ManufacturersController extends Controller * Returns a view that displays a form to edit a manufacturer. * * @author [A. Gianotto] [] - * @see ManufacturersController::postEdit() + * @see ManufacturersController::update() * @param int $manufacturerId * @since [v1.0] * @return \Illuminate\Contracts\View\View */ - public function edit($manufacturerId = null) + public function edit($id = null) { // Check if the manufacturer exists - if (is_null($item = Manufacturer::find($manufacturerId))) { - // Redirect to the manufacturer page + if (is_null($item = Manufacturer::find($id))) { return redirect()->route('manufacturers.index')->with('error', trans('admin/manufacturers/message.does_not_exist')); } // Show the page @@ -114,9 +119,12 @@ class ManufacturersController extends Controller // Save the data $manufacturer->name = $request->input('name'); - // Was it created? + $manufacturer->url = $request->input('url'); + $manufacturer->support_url = $request->input('support_url'); + $manufacturer->support_phone = $request->input('support_phone'); + $manufacturer->support_email = $request->input('support_email'); + if ($manufacturer->save()) { - // Redirect to the new manufacturer page return redirect()->route('manufacturers.index')->with('success', trans('admin/manufacturers/message.update.success')); } return redirect()->back()->withInput()->withErrors($manufacturer->getErrors()); diff --git a/app/Http/Transformers/ManufacturersTransformer.php b/app/Http/Transformers/ManufacturersTransformer.php new file mode 100644 index 0000000000..23ba51ee2b --- /dev/null +++ b/app/Http/Transformers/ManufacturersTransformer.php @@ -0,0 +1,55 @@ +transformDatatables($array, $total); + } + + public function transformManufacturer (Manufacturer $manufacturer = null) + { + if ($manufacturer) { + + $array = [ + 'id' => e($manufacturer->id), + 'name' => e($manufacturer->name), + 'url' => e($manufacturer->url), + 'support_url' => e($manufacturer->support_url), + 'support_phone' => e($manufacturer->support_phone), + 'support_email' => e($manufacturer->support_email), + 'assets_count' => e($manufacturer->assets_count), + 'licenses_count' => e($manufacturer->licenses_count), + 'consumables_count' => e($manufacturer->consumables_count), + 'accessories_count' => e($manufacturer->accessories_count), + 'created_at' => Helper::getFormattedDateObject($manufacturer->created_at, 'datetime'), + 'updated_at' => Helper::getFormattedDateObject($manufacturer->updated_at, 'datetime'), + ]; + + $permissions_array['available_actions'] = [ + 'update' => Gate::allows('update', Manufacturer::class) ? true : false, + 'delete' => Gate::allows('delete', Manufacturer::class) ? true : false, + ]; + + $array += $permissions_array; + + return $array; + } + + + } + + + +} diff --git a/app/Models/Manufacturer.php b/app/Models/Manufacturer.php index 4959d10fed..189dae51b5 100755 --- a/app/Models/Manufacturer.php +++ b/app/Models/Manufacturer.php @@ -16,7 +16,9 @@ class Manufacturer extends SnipeModel // Declare the rules for the form validation protected $rules = array( 'name' => 'required|min:2|max:255|unique:manufacturers,name,NULL,deleted_at', - 'user_id' => 'integer', + 'url' => 'url|nullable', + 'support_url' => 'url|nullable', + 'support_email' => 'email|nullable' ); protected $hidden = ['user_id','deleted_at']; @@ -38,7 +40,7 @@ class Manufacturer extends SnipeModel * * @var array */ - protected $fillable = ['name']; + protected $fillable = ['name','url','support_url','support_phone','support_email']; diff --git a/app/Presenters/ManufacturerPresenter.php b/app/Presenters/ManufacturerPresenter.php index 1de661fac2..60c94d005a 100644 --- a/app/Presenters/ManufacturerPresenter.php +++ b/app/Presenters/ManufacturerPresenter.php @@ -11,6 +11,130 @@ use App\Helpers\Helper; class ManufacturerPresenter extends Presenter { + /** + * Json Column Layout for bootstrap table + * @return string + */ + public static function dataTableLayout() + { + $layout = [ + + [ + "field" => "id", + "searchable" => false, + "sortable" => true, + "switchable" => true, + "title" => trans('general.id'), + "visible" => false + ], + [ + "field" => "name", + "searchable" => true, + "sortable" => true, + "title" => trans('admin/manufacturers/table.name'), + "visible" => true, + "formatter" => "manufacturersLinkFormatter" + ], + [ + "field" => "url", + "searchable" => true, + "sortable" => true, + "switchable" => true, + "title" => trans('admin/manufacturers/table.url'), + "visible" => true, + "formatter" => "linkFormatter" + ], + + [ + "field" => "support_url", + "searchable" => true, + "sortable" => true, + "switchable" => true, + "title" => trans('admin/manufacturers/table.support_url'), + "visible" => true, + "formatter" => "linkFormatter" + ], + + [ + "field" => "support_phone", + "searchable" => true, + "sortable" => true, + "switchable" => true, + "title" => trans('admin/manufacturers/table.support_phone'), + "visible" => true + ], + + [ + "field" => "support_email", + "searchable" => true, + "sortable" => true, + "switchable" => true, + "title" => trans('admin/manufacturers/table.support_email'), + "visible" => true, + "formatter" => "emailFormatter" + ], + + [ + "field" => "assets_count", + "searchable" => false, + "sortable" => false, + "switchable" => true, + "title" => ' ' + .'', + "visible" => true, + ], + [ + "field" => "licenses_count", + "searchable" => false, + "sortable" => false, + "switchable" => true, + "title" => ' ' + .'', + "visible" => true, + ], + [ + "field" => "consumables_count", + "searchable" => false, + "sortable" => false, + "switchable" => true, + "title" => ' ' + .'', + "visible" => true, + ], + [ + "field" => "accessories_count", + "searchable" => false, + "sortable" => false, + "switchable" => true, + "title" => ' ' + .'', + "visible" => true, + ], + [ + "field" => "created_at", + "searchable" => true, + "sortable" => true, + "switchable" => true, + "title" => trans('general.created_at'), + "visible" => false, + 'formatter' => 'dateDisplayFormatter' + ], + + [ + "field" => "actions", + "searchable" => false, + "sortable" => false, + "switchable" => false, + "title" => trans('table.actions'), + "visible" => true, + "formatter" => "manufacturersActionsFormatter", + ] + ]; + + return json_encode($layout); + } + + /** * Link to this manufacturers name diff --git a/database/migrations/2017_03_10_210807_add_fields_to_manufacturer.php b/database/migrations/2017_03_10_210807_add_fields_to_manufacturer.php new file mode 100644 index 0000000000..8e19b205cd --- /dev/null +++ b/database/migrations/2017_03_10_210807_add_fields_to_manufacturer.php @@ -0,0 +1,38 @@ +string('url')->nullable()->default(null); + $table->string('support_url')->nullable()->default(null); + $table->string('support_phone')->nullable()->default(null); + $table->string('support_email')->nullable()->default(null); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('settings', function ($table) { + $table->dropColumn('url'); + $table->dropColumn('support_url'); + $table->dropColumn('support_phone'); + $table->dropColumn('support_email'); + }); + } +} diff --git a/resources/lang/en/admin/manufacturers/table.php b/resources/lang/en/admin/manufacturers/table.php index f66320fe8d..4e3ea9904d 100644 --- a/resources/lang/en/admin/manufacturers/table.php +++ b/resources/lang/en/admin/manufacturers/table.php @@ -1,12 +1,16 @@ 'About manufacturers', - 'about_manufacturers_text' => 'Manufacturers make all the magic items we consume.', + 'about_manufacturers_title' => 'About manufacturers', + 'about_manufacturers_text' => 'Manufacturers are the companies that create your assets. You can store important support contact information about them here, which will be displayed on your asset detail pages.', 'asset_manufacturers' => 'Asset Manufacturers', 'create' => 'Create Manufacturer', 'id' => 'ID', - 'name' => 'Manufacturer Name', + 'name' => 'Name', + 'support_email' => 'Support Email', + 'support_phone' => 'Support Phone', + 'support_url' => 'Support URL', 'update' => 'Update Manufacturer', + 'url' => 'URL', ); diff --git a/resources/views/hardware/view.blade.php b/resources/views/hardware/view.blade.php index 2199e7a656..3f52c0866a 100755 --- a/resources/views/hardware/view.blade.php +++ b/resources/views/hardware/view.blade.php @@ -105,20 +105,37 @@ {{ trans('admin/hardware/form.manufacturer') }} - @can('superuser') + @can('view', \App\Models\Manufacturer::class) {{ $asset->model->manufacturer->name }} @else {{ $asset->model->manufacturer->name }} @endcan + + @if ($asset->model->manufacturer->url) +
{{ $asset->model->manufacturer->url }} + @endif + + @if ($asset->model->manufacturer->support_url) +
{{ $asset->model->manufacturer->support_url }} + @endif + + @if ($asset->model->manufacturer->support_phone) +
{{ $asset->model->manufacturer->support_phone }} + @endif + + @if ($asset->model->manufacturer->support_email) +
{{ $asset->model->manufacturer->support_email }} + @endif + @endif {{ trans('admin/hardware/form.model') }} - @can('superuser') + @can('view', \App\Models\AssetModel::class) {{ $asset->model->name }} @@ -133,7 +150,7 @@ {{ $asset->model->model_number }} - @endif + @if ($asset->model->fieldset) @foreach($asset->model->fieldset->fields as $field) diff --git a/resources/views/licenses/view.blade.php b/resources/views/licenses/view.blade.php index 02d643408e..c9eab472c2 100755 --- a/resources/views/licenses/view.blade.php +++ b/resources/views/licenses/view.blade.php @@ -122,11 +122,35 @@ @endif - @if (!is_null($license->manufacturer)) - - {{ trans('general.manufacturer') }} - {{ $license->manufacturer->name }} - + @if ($license->manufacturer) + + {{ trans('admin/hardware/form.manufacturer') }} + + @can('view', \App\Models\Manufacturer::class) + + {{ $license->manufacturer->name }} + + @else + {{ $license->manufacturer->name }} + @endcan + + @if ($license->manufacturer->url) +
{{ $license->manufacturer->url }} + @endif + + @if ($license->manufacturer->support_url) +
{{ $license->manufacturer->support_url }} + @endif + + @if ($license->manufacturer->support_phone) +
{{ $license->manufacturer->support_phone }} + @endif + + @if ($license->manufacturer->support_email) +
{{ $license->manufacturer->support_email }} + @endif + + @endif @can('viewKeys', $license) diff --git a/resources/views/manufacturers/edit.blade.php b/resources/views/manufacturers/edit.blade.php index 2c05f288ec..895b45e554 100755 --- a/resources/views/manufacturers/edit.blade.php +++ b/resources/views/manufacturers/edit.blade.php @@ -10,4 +10,44 @@ {{-- Page content --}} @section('inputFields') @include ('partials.forms.edit.name', ['translated_name' => trans('admin/manufacturers/table.name')]) + +
+ +
+ + {!! $errors->first('url', ' :message') !!} +
+
+ + +
+ +
+ + {!! $errors->first('support_url', ' :message') !!} +
+
+ + +
+ +
+ + {!! $errors->first('support_phone', ' :message') !!} +
+
+ + +
+ +
+ + {!! $errors->first('support_email', ' :message') !!} +
+
+ @stop diff --git a/resources/views/manufacturers/index.blade.php b/resources/views/manufacturers/index.blade.php index 13d948e3d3..bec997713c 100755 --- a/resources/views/manufacturers/index.blade.php +++ b/resources/views/manufacturers/index.blade.php @@ -28,18 +28,7 @@ data-cookie="true" data-click-to-select="true" data-cookie-id-table="manufacturersTable-{{ config('version.hash_version') }}"> - - - {{ trans('general.id') }} - - {{ trans('admin/manufacturers/table.name') }} - {{ trans('general.assets') }} - {{ trans('general.licenses') }} - {{ trans('general.accessories') }} - {{ trans('general.consumables') }} - {{ trans('table.actions') }} - - + @@ -50,5 +39,9 @@ @stop @section('moar_scripts') -@include ('partials.bootstrap-table', ['exportFile' => 'manufacturers-export', 'search' => true]) + @include ('partials.bootstrap-table', + ['exportFile' => 'manufacturers-export', + 'search' => true, + 'columns' => \App\Presenters\ManufacturerPresenter::dataTableLayout() + ]) @stop diff --git a/resources/views/manufacturers/view.blade.php b/resources/views/manufacturers/view.blade.php index ae7d59d98f..1334479b8b 100644 --- a/resources/views/manufacturers/view.blade.php +++ b/resources/views/manufacturers/view.blade.php @@ -63,7 +63,7 @@ {{ trans('admin/hardware/form.model') }} {{ trans('general.asset_tag') }} {{ trans('admin/hardware/form.serial') }} - {{ trans('general.user') }} + {{ trans('general.user') }} {{ trans('admin/hardware/table.change') }} {{ trans('table.actions') }} diff --git a/resources/views/partials/bootstrap-table.blade.php b/resources/views/partials/bootstrap-table.blade.php index 2652020793..fe6fa39db7 100644 --- a/resources/views/partials/bootstrap-table.blade.php +++ b/resources/views/partials/bootstrap-table.blade.php @@ -217,6 +217,12 @@ $('.snipe-table').bootstrapTable({ } } + function linkFormatter(value, row) { + if (value) { + return ' ' + value + ''; + } + } + function assetCompanyFilterFormatter(value, row) { if (value) { return ' ' + value + '';