diff --git a/lib/NGCP/Panel/Controller/Device.pm b/lib/NGCP/Panel/Controller/Device.pm index 9dac673f47..0c69bd7af8 100644 --- a/lib/NGCP/Panel/Controller/Device.pm +++ b/lib/NGCP/Panel/Controller/Device.pm @@ -113,6 +113,10 @@ sub devmod_create :Chained('base') :PathPart('model/create') :Args(0) { my $params = {}; $params = $params->merge($c->session->{created_objects}); + if($posted) { + $c->req->params->{front_image} = $c->req->upload('front_image'); + $c->req->params->{mac_image} = $c->req->upload('mac_image'); + } $form->process( posted => $posted, params => $c->request->params, @@ -138,6 +142,18 @@ sub devmod_create :Chained('base') :PathPart('model/create') :Args(0) { } delete $form->params->{reseller}; + my $ft = File::Type->new(); + if($form->params->{front_image}) { + my $front_image = delete $form->params->{front_image}; + $form->params->{front_image} = $front_image->slurp; + $form->params->{front_image_type} = $ft->mime_type($form->params->{front_image}); + } + if($form->params->{mac_image}) { + my $mac_image = delete $form->params->{mac_image}; + $form->params->{mac_image} = $mac_image->slurp; + $form->params->{mac_image_type} = $ft->mime_type($form->params->{mac_image}); + } + my $devmod = $schema->resultset('autoprov_devices')->create($form->params); delete $c->session->{created_objects}->{reseller}; $c->session->{created_objects}->{device} = { id => $devmod->id }; @@ -212,6 +228,10 @@ sub devmod_edit :Chained('devmod_base') :PathPart('edit') :Args(0) { } else { $form = NGCP::Panel::Form::Device::Model->new; } + if($posted) { + $c->req->params->{front_image} = $c->req->upload('front_image'); + $c->req->params->{mac_image} = $c->req->upload('mac_image'); + } $form->process( posted => $posted, @@ -238,6 +258,24 @@ sub devmod_edit :Chained('devmod_base') :PathPart('edit') :Args(0) { } delete $form->params->{reseller}; + if($form->params->{front_image}) { + my $front_image = delete $form->params->{front_image}; + $form->params->{front_image} = $front_image->slurp; + $form->params->{front_image_type} = $front_image->type; + } else { + delete $form->params->{front_image}; + delete $form->params->{front_image_type}; + } + + if($form->params->{mac_image}) { + my $mac_image = delete $form->params->{mac_image}; + $form->params->{mac_image} = $mac_image->slurp; + $form->params->{mac_image_type} = $mac_image->type; + } else { + delete $form->params->{mac_image}; + delete $form->params->{mac_image_type}; + } + $c->stash->{devmod}->update($form->params); delete $c->session->{created_objects}->{reseller}; $c->flash(messages => [{type => 'success', text => 'Successfully updated device model'}]); @@ -258,6 +296,32 @@ sub devmod_edit :Chained('devmod_base') :PathPart('edit') :Args(0) { ); } +sub devmod_download_frontimage :Chained('devmod_base') :PathPart('frontimage') :Args(0) { + my ($self, $c) = @_; + + my $devmod = $c->stash->{devmod}; + unless($devmod->front_image) { + $c->response->body("404 - No front image available for this device model"); + $c->response->status(404); + return; + } + $c->response->content_type($devmod->front_image_type); + $c->response->body($devmod->front_image); +} + +sub devmod_download_macimage :Chained('devmod_base') :PathPart('macimage') :Args(0) { + my ($self, $c) = @_; + + my $devmod = $c->stash->{devmod}; + unless($devmod->mac_image) { + $c->response->body("404 - No mac image available for this device model"); + $c->response->status(404); + return; + } + $c->response->content_type($devmod->mac_image_type); + $c->response->body($devmod->mac_image); +} + sub devfw_ajax :Chained('base') :PathPart('firmware/ajax') :Args(0) { my ($self, $c) = @_; diff --git a/lib/NGCP/Panel/Form/Device/Model.pm b/lib/NGCP/Panel/Form/Device/Model.pm index 8696b1d5a8..445e77d7d9 100644 --- a/lib/NGCP/Panel/Form/Device/Model.pm +++ b/lib/NGCP/Panel/Form/Device/Model.pm @@ -7,6 +7,7 @@ use Moose::Util::TypeConstraints; use HTML::FormHandler::Widget::Block::Bootstrap; has '+widget_wrapper' => ( default => 'Bootstrap' ); +has '+enctype' => ( default => 'multipart/form-data'); has_field 'submitid' => ( type => 'Hidden' ); sub build_render_list {[qw/submitid fields actions/]} sub build_form_element_class {[qw(form-horizontal)]} @@ -23,6 +24,20 @@ has_field 'model' => ( label => 'Model', ); +has_field 'front_image' => ( + type => 'Upload', + required => 0, + label => 'Front Image', + max_size => '67108864', # 64MB +); + +has_field 'mac_image' => ( + type => 'Upload', + required => 0, + label => 'MAC Address Image', + max_size => '67108864', # 64MB +); + has_field 'save' => ( type => 'Submit', value => 'Save', @@ -33,7 +48,7 @@ has_field 'save' => ( has_block 'fields' => ( tag => 'div', class => [qw/modal-body/], - render_list => [qw/vendor model/], + render_list => [qw/vendor model front_image mac_image/], ); has_block 'actions' => ( diff --git a/lib/NGCP/Panel/Form/Device/ModelAdmin.pm b/lib/NGCP/Panel/Form/Device/ModelAdmin.pm index 6b22a59825..e24fcab995 100644 --- a/lib/NGCP/Panel/Form/Device/ModelAdmin.pm +++ b/lib/NGCP/Panel/Form/Device/ModelAdmin.pm @@ -32,7 +32,7 @@ has_field 'save' => ( has_block 'fields' => ( tag => 'div', class => [qw/modal-body/], - render_list => [qw/reseller vendor model/], + render_list => [qw/reseller vendor model front_image mac_image/], ); has_block 'actions' => (