From e4d305895c203ba87d5553c79c04b2593a87893c Mon Sep 17 00:00:00 2001 From: Andreas Granig Date: Thu, 1 Aug 2013 18:54:20 +0200 Subject: [PATCH] Clean up NCOS handling. Add reseller selection when creating level as admin. Align to new DT methods. --- lib/NGCP/Panel/Controller/Contact.pm | 1 + lib/NGCP/Panel/Controller/NCOS.pm | 249 ++++++++++++------ lib/NGCP/Panel/Controller/Peering.pm | 5 +- lib/NGCP/Panel/Form/NCOS/AdminLevel.pm | 47 ++++ .../Form/{NCOSPattern.pm => NCOS/Pattern.pm} | 4 +- .../{NCOSLevel.pm => NCOS/ResellerLevel.pm} | 6 +- share/templates/ncos/list.tt | 26 +- share/templates/ncos/pattern_list.tt | 24 +- share/templates/reseller/details.tt | 15 +- 9 files changed, 267 insertions(+), 110 deletions(-) create mode 100644 lib/NGCP/Panel/Form/NCOS/AdminLevel.pm rename lib/NGCP/Panel/Form/{NCOSPattern.pm => NCOS/Pattern.pm} (93%) rename lib/NGCP/Panel/Form/{NCOSLevel.pm => NCOS/ResellerLevel.pm} (92%) diff --git a/lib/NGCP/Panel/Controller/Contact.pm b/lib/NGCP/Panel/Controller/Contact.pm index 683db6b361..2e11ae406c 100644 --- a/lib/NGCP/Panel/Controller/Contact.pm +++ b/lib/NGCP/Panel/Controller/Contact.pm @@ -117,6 +117,7 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) { item => $c->stash->{contact}, action => $c->uri_for($c->stash->{contact}->id, 'edit'), ); + # TODO: use values instead of params, chain reseller creation, add check_form_buttons if($posted && $form->validated) { try { delete $form->params->{submitid}; diff --git a/lib/NGCP/Panel/Controller/NCOS.pm b/lib/NGCP/Panel/Controller/NCOS.pm index 0914d90e7c..009d9f609d 100644 --- a/lib/NGCP/Panel/Controller/NCOS.pm +++ b/lib/NGCP/Panel/Controller/NCOS.pm @@ -1,12 +1,14 @@ package NGCP::Panel::Controller::NCOS; use Sipwise::Base; - BEGIN { extends 'Catalyst::Controller'; } -use NGCP::Panel::Form::NCOSLevel; -use NGCP::Panel::Form::NCOSPattern; +use NGCP::Panel::Form::NCOS::ResellerLevel; +use NGCP::Panel::Form::NCOS::AdminLevel; +use NGCP::Panel::Form::NCOS::Pattern; use NGCP::Panel::Utils::Navigation; +use NGCP::Panel::Utils::Datatables; + use HTML::FormHandler; sub auto :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) :AllowedRole(reseller) { @@ -23,6 +25,14 @@ sub levels_list :Chained('/') :PathPart('ncos') :CaptureArgs(0) { my $levels_rs = $self->$dispatch_to($c); $c->stash(levels_rs => $levels_rs); + $c->stash->{level_dt_columns} = NGCP::Panel::Utils::Datatables::set_columns($c, [ + { name => 'id', search => 1, title => '#' }, + { name => 'reseller.name', search => 1, title => 'Reseller' }, + { name => 'level', search => 1, title => 'Level Name' }, + { name => 'mode', search => 1, title => 'Mode' }, + { name => 'description', search => 1, title => 'Description' }, + ]); + $c->stash(template => 'ncos/list.tt'); } @@ -47,11 +57,7 @@ sub ajax :Chained('levels_list') :PathPart('ajax') :Args(0) { my ($self, $c) = @_; my $resultset = $c->stash->{levels_rs}; - - $c->forward( "/ajax_process_resultset", [$resultset, - ["id", "level", "mode", "description"], - ["level", "mode", "description"]]); - + NGCP::Panel::Utils::Datatables::process($c, $resultset, $c->stash->{level_dt_columns}); $c->detach( $c->view("JSON") ); } @@ -59,18 +65,14 @@ sub base :Chained('levels_list') :PathPart('') :CaptureArgs(1) { my ($self, $c, $level_id) = @_; unless($level_id && $level_id->is_integer) { - $c->flash(messages => [{type => 'error', text => 'Invalid NCOS Level id detected!'}]); - $c->response->redirect($c->uri_for()); - $c->detach; - return; + $c->flash(messages => [{type => 'error', text => 'Invalid NCOS level id detected'}]); + NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for); } my $res = $c->stash->{levels_rs}->find($level_id); unless(defined($res)) { - $c->flash(messages => [{type => 'error', text => 'NCOS Level does not exist!'}]); - $c->response->redirect($c->uri_for()); - $c->detach; - return; + $c->flash(messages => [{type => 'error', text => 'NCOS level does not exist'}]); + NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for); } $c->stash(level_result => $res); } @@ -79,21 +81,48 @@ sub edit :Chained('base') :PathPart('edit') { my ($self, $c) = @_; my $posted = ($c->request->method eq 'POST'); - my $form = NGCP::Panel::Form::NCOSLevel->new; + my $form; + my $level = $c->stash->{level_result}; + my $params = { $level->get_inflated_columns }; + $params->{reseller}{id} = delete $params->{reseller_id}; + $params = $params->merge($c->session->{created_objects}); + if($c->user->is_superuser) { + $form = NGCP::Panel::Form::NCOS::AdminLevel->new; + } else { + $form = NGCP::Panel::Form::NCOS::ResellerLevel->new; + } $form->process( posted => $posted, params => $c->request->params, - action => $c->uri_for_action('/ncos/edit'), - item => $c->stash->{level_result}, + item => $params, ); - if($form->validated) { - $c->flash(messages => [{type => 'success', text => 'NCOS Level successfully changed!'}]); - $c->response->redirect($c->uri_for()); - return; + NGCP::Panel::Utils::Navigation::check_form_buttons( + c => $c, + form => $form, + fields => { + 'reseller.create' => $c->uri_for('/reseller/create'), + }, + back_uri => $c->req->uri, + ); + if($posted && $form->validated) { + try { + $form->values->{reseller_id} = $form->values->{reseller}{id}; + delete $form->values->{reseller}; + $level->update($form->values); + delete $c->session->{created_objects}->{reseller}; + $c->flash(messages => [{type => 'success', text => 'NCOS level successfully updated'}]); + } catch($e) { + $c->log->error("failed to update ncos level: $e"); + $c->flash(messages => [{type => 'error', text => 'Failed to update NCOS level'}]); + } + NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/ncos')); } - $c->stash(form => $form); - $c->stash(edit_flag => 1); + $c->stash( + close_target => $c->uri_for, + edit_flag => 1, + form => $form, + ); } sub delete :Chained('base') :PathPart('delete') { @@ -101,10 +130,10 @@ sub delete :Chained('base') :PathPart('delete') { try { $c->stash->{level_result}->delete; - $c->flash(messages => [{type => 'success', text => 'NCOS Level successfully deleted!'}]); + $c->flash(messages => [{type => 'success', text => 'NCOS level successfully deleted'}]); } catch (DBIx::Class::Exception $e) { - $c->flash(messages => [{type => 'error', text => 'Delete failed.'}]); - $c->log->info("Delete failed: " . $e); + $c->flash(messages => [{type => 'error', text => 'Failed to delete NCOS level'}]); + $c->log->error("failed to delete ncos level: $e"); }; $c->response->redirect($c->uri_for()); } @@ -112,22 +141,49 @@ sub delete :Chained('base') :PathPart('delete') { sub create :Chained('levels_list') :PathPart('create') :Args(0) { my ($self, $c) = @_; - my $form = NGCP::Panel::Form::NCOSLevel->new; + my $posted = ($c->request->method eq 'POST'); + my $form; + my $params = {}; + $params = $params->merge($c->session->{created_objects}); + if($c->user->is_superuser) { + $form = NGCP::Panel::Form::NCOS::AdminLevel->new; + } else { + $form = NGCP::Panel::Form::NCOS::ResellerLevel->new; + } $form->process( - posted => ($c->request->method eq 'POST'), + posted => $posted, params => $c->request->params, - action => $c->uri_for_action('/ncos/create'), - item => $c->stash->{levels_rs}->new_result({}), + item => $params, + ); + NGCP::Panel::Utils::Navigation::check_form_buttons( + c => $c, + form => $form, + fields => { + 'reseller.create' => $c->uri_for('/reseller/create'), + }, + back_uri => $c->req->uri, ); - if($form->validated) { - $c->flash(messages => [{type => 'success', text => 'NCOS Level successfully created!'}]); - $c->response->redirect($c->uri_for_action('/ncos/root')); - return; + if($posted && $form->validated) { + try { + my $level = $c->stash->{levels_rs}; + unless($c->user->is_superuser) { + $form->values->{reseller}{id} = $c->user->reseller_id; + } + $level->create($form->values); + delete $c->session->{created_objects}->{reseller}; + $c->flash(messages => [{type => 'success', text => 'NCOS level successfully created'}]); + } catch($e) { + $c->log->error("failed to create ncos level: $e"); + $c->flash(messages => [{type => 'error', text => 'Failed to create NCOS level'}]); + } + NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/ncos')); } - $c->stash(close_target => $c->uri_for()); - $c->stash(create_flag => 1); - $c->stash(form => $form); + $c->stash( + close_target => $c->uri_for, + create_flag => 1, + form => $form, + ); } sub pattern_list :Chained('base') :PathPart('pattern') :CaptureArgs(0) { @@ -137,6 +193,12 @@ sub pattern_list :Chained('base') :PathPart('pattern') :CaptureArgs(0) { $c->stash(pattern_rs => $pattern_rs); $c->stash(pattern_base_uri => $c->uri_for_action("/ncos/pattern_root", [$c->req->captures->[0]])); + + $c->stash->{pattern_dt_columns} = NGCP::Panel::Utils::Datatables::set_columns($c, [ + { name => 'id', search => 1, title => '#' }, + { name => 'pattern', search => 1, title => 'Pattern' }, + { name => 'description', search => 1, title => 'Description' }, + ]); my $local_ac_form = HTML::FormHandler::Model::DBIC->new(field_list => [ local_ac => { type => 'Boolean', label => 'Include local area code'}, @@ -150,11 +212,24 @@ sub pattern_list :Chained('base') :PathPart('pattern') :CaptureArgs(0) { params => $c->request->params, item => $c->stash->{level_result} ); + NGCP::Panel::Utils::Navigation::check_form_buttons( + c => $c, + form => $local_ac_form, + fields => {}, + back_uri => $c->req->uri, + ); $c->stash(local_ac_form => $local_ac_form); if($local_ac_form->validated) { - $c->response->redirect($c->stash->{pattern_base_uri}); - $c->detach; - return; + try { + $c->stash->{pattern_rs}->first->update({ + local_ac => $local_ac_form->values->{local_ac}, + }); + $c->flash(messages => [{type => 'success', text => 'Successfully updated NCOS pattern'}]); + } catch($e) { + $c->log->error("failed to update local-ac for ncos: $e"); + $c->flash(messages => [{type => 'success', text => 'Successfully updated NCOS pattern'}]); + } + NGCP::Panel::Utils::Navigation::back_or($c, $c->stash->{pattern_base_uri}); } $c->stash(template => 'ncos/pattern_list.tt'); @@ -168,11 +243,7 @@ sub pattern_ajax :Chained('pattern_list') :PathPart('ajax') :Args(0) { my ($self, $c) = @_; my $resultset = $c->stash->{pattern_rs}; - - $c->forward( "/ajax_process_resultset", [$resultset, - ["id", "pattern", "description"], - ["pattern", "description"]]); - + NGCP::Panel::Utils::Datatables::process($c, $resultset, $c->stash->{pattern_dt_columns}); $c->detach( $c->view("JSON") ); } @@ -180,18 +251,14 @@ sub pattern_base :Chained('pattern_list') :PathPart('') :CaptureArgs(1) { my ($self, $c, $pattern_id) = @_; unless($pattern_id && $pattern_id->is_integer) { - $c->flash(messages => [{type => 'error', text => 'Invalid NCOS Pattern id detected!'}]); - $c->response->redirect($c->stash->{pattern_base_uri}); - $c->detach; - return; + $c->flash(messages => [{type => 'error', text => 'Invalid NCOS pattern id detected'}]); + NGCP::Panel::Utils::Navigation::back_or($c, $c->stash->{pattern_base_uri}); } my $res = $c->stash->{pattern_rs}->find($pattern_id); unless(defined($res)) { - $c->flash(messages => [{type => 'error', text => 'Pattern does not exist!'}]); - $c->response->redirect($c->stash->{pattern_base_uri}); - $c->detach; - return; + $c->flash(messages => [{type => 'error', text => 'NCOS pattern does not exist'}]); + NGCP::Panel::Utils::Navigation::back_or($c, $c->stash->{pattern_base_uri}); } $c->stash(pattern_result => $res); } @@ -200,22 +267,34 @@ sub pattern_edit :Chained('pattern_base') :PathPart('edit') { my ($self, $c) = @_; my $posted = ($c->request->method eq 'POST'); - my $form = NGCP::Panel::Form::NCOSPattern->new; + my $form = NGCP::Panel::Form::NCOS::Pattern->new; $form->process( posted => $posted, params => $c->request->params, - action => $c->uri_for_action('/ncos/pattern_edit', $c->req->captures), item => $c->stash->{pattern_result}, ); - if($form->validated) { - $c->flash(messages => [{type => 'success', text => 'Pattern successfully changed!'}]); - $c->response->redirect($c->stash->{pattern_base_uri}); - return; + NGCP::Panel::Utils::Navigation::check_form_buttons( + c => $c, + form => $form, + fields => {}, + back_uri => $c->req->uri, + ); + if($posted && $form->validated) { + try { + $c->stash->{pattern_result}->update($form->values); + $c->flash(messages => [{type => 'success', text => 'NCOS pattern successfully updated'}]); + } catch($e) { + $c->log->error("failed to update ncos pattern: $e"); + $c->flash(messages => [{type => 'error', text => 'Failed to update NCOS pattern'}]); + } + NGCP::Panel::Utils::Navigation::back_or($c, $c->stash->{pattern_base_uri}); } - $c->stash(close_target => $c->stash->{pattern_base_uri}); - $c->stash(form => $form); - $c->stash(edit_flag => 1); + $c->stash( + close_target => $c->stash->{pattern_base_uri}, + form => $form, + edit_flag => 1 + ); } sub pattern_delete :Chained('pattern_base') :PathPart('delete') { @@ -223,33 +302,45 @@ sub pattern_delete :Chained('pattern_base') :PathPart('delete') { try { $c->stash->{pattern_result}->delete; - $c->flash(messages => [{type => 'success', text => 'Pattern successfully deleted!'}]); + $c->flash(messages => [{type => 'success', text => 'NCOS pattern successfully deleted'}]); } catch (DBIx::Class::Exception $e) { - $c->flash(messages => [{type => 'error', text => 'Delete failed.'}]); - $c->log->info("Delete failed: " . $e); + $c->log->error("failed to delete ncos pattern: $e"); + $c->flash(messages => [{type => 'error', text => 'Failed to delete NCOS pattern'}]); }; - $c->response->redirect($c->stash->{pattern_base_uri}); + NGCP::Panel::Utils::Navigation::back_or($c->stash->{pattern_base_uri}); } sub pattern_create :Chained('pattern_list') :PathPart('create') :Args(0) { my ($self, $c) = @_; - my $form = NGCP::Panel::Form::NCOSPattern->new; + my $posted = ($c->request->method eq 'POST'); + my $form = NGCP::Panel::Form::NCOS::Pattern->new; $form->process( - posted => ($c->request->method eq 'POST'), + posted => $posted, params => $c->request->params, - action => $c->uri_for_action('/ncos/pattern_create', $c->req->captures), - item => $c->stash->{pattern_rs}->new_result({}), ); - if($form->validated) { - $c->flash(messages => [{type => 'success', text => 'Pattern successfully created!'}]); - $c->response->redirect($c->stash->{pattern_base_uri}); - return; + NGCP::Panel::Utils::Navigation::check_form_buttons( + c => $c, + form => $form, + fields => {}, + back_uri => $c->req->uri, + ); + if($posted && $form->validated) { + try { + $c->stash->{pattern_rs}->create($form->values); + $c->flash(messages => [{type => 'success', text => 'NCOS pattern successfully created'}]); + } catch($e) { + $c->log->error("failed to create ncos pattern: $e"); + $c->flash(messages => [{type => 'error', text => 'Failed to create NCOS pattern'}]); + } + NGCP::Panel::Utils::Navigation::back_or($c, $c->stash->{pattern_base_uri}); } - $c->stash(close_target => $c->stash->{pattern_base_uri}); - $c->stash(create_flag => 1); - $c->stash(form => $form); + $c->stash( + close_target => $c->stash->{pattern_base_uri}, + form => $form, + create_flag => 1 + ); } diff --git a/lib/NGCP/Panel/Controller/Peering.pm b/lib/NGCP/Panel/Controller/Peering.pm index c41692c398..a14e72090d 100644 --- a/lib/NGCP/Panel/Controller/Peering.pm +++ b/lib/NGCP/Panel/Controller/Peering.pm @@ -72,7 +72,8 @@ sub edit :Chained('base') :PathPart('edit') { my $posted = ($c->request->method eq 'POST'); my $form = NGCP::Panel::Form::PeeringGroup->new; - my $params = {}; + my $params = { $c->stash->{group_result}->get_inflated_columns }; + $params->{contract}{id} = delete $params->{peering_contract_id}; $params = $params->merge($c->session->{created_objects}); $form->process( posted => $posted, @@ -81,7 +82,7 @@ sub edit :Chained('base') :PathPart('edit') { ); NGCP::Panel::Utils::Navigation::check_form_buttons( c => $c, form => $form, - fields => {'contract.create' => $c->uri_for('/contract/peering/create/noreseller')}, + fields => {'contract.create' => $c->uri_for('/contract/peering/create')}, back_uri => $c->req->uri, ); if($posted && $form->validated) { diff --git a/lib/NGCP/Panel/Form/NCOS/AdminLevel.pm b/lib/NGCP/Panel/Form/NCOS/AdminLevel.pm new file mode 100644 index 0000000000..e2a27a8118 --- /dev/null +++ b/lib/NGCP/Panel/Form/NCOS/AdminLevel.pm @@ -0,0 +1,47 @@ +package NGCP::Panel::Form::NCOS::AdminLevel; + +use HTML::FormHandler::Moose; +extends 'NGCP::Panel::Form::NCOS::ResellerLevel'; +use Moose::Util::TypeConstraints; + +has_field 'reseller' => ( + type => '+NGCP::Panel::Field::Reseller', + not_nullable => 1, +); + +has_block 'fields' => ( + tag => 'div', + class => [qw/modal-body/], + render_list => [qw/reseller level mode description/], +); + +has_block 'actions' => ( + tag => 'div', + class => [qw/modal-footer/], + render_list => [qw/save/], +); + +1; + +=head1 NAME + +NGCP::Panel::Form::NCOSLevel + +=head1 DESCRIPTION + +Form to modify a billing.ncos_levels row. + +=head1 METHODS + +=head1 AUTHOR + +Gerhard Jungwirth + +=head1 LICENSE + +This library is free software. You can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut + +# vim: set tabstop=4 expandtab: diff --git a/lib/NGCP/Panel/Form/NCOSPattern.pm b/lib/NGCP/Panel/Form/NCOS/Pattern.pm similarity index 93% rename from lib/NGCP/Panel/Form/NCOSPattern.pm rename to lib/NGCP/Panel/Form/NCOS/Pattern.pm index adaaed7e5f..653a90ca8d 100644 --- a/lib/NGCP/Panel/Form/NCOSPattern.pm +++ b/lib/NGCP/Panel/Form/NCOS/Pattern.pm @@ -1,7 +1,7 @@ -package NGCP::Panel::Form::NCOSPattern; +package NGCP::Panel::Form::NCOS::Pattern; use HTML::FormHandler::Moose; -extends 'HTML::FormHandler::Model::DBIC'; +extends 'HTML::FormHandler'; use Moose::Util::TypeConstraints; use HTML::FormHandler::Widget::Block::Bootstrap; diff --git a/lib/NGCP/Panel/Form/NCOSLevel.pm b/lib/NGCP/Panel/Form/NCOS/ResellerLevel.pm similarity index 92% rename from lib/NGCP/Panel/Form/NCOSLevel.pm rename to lib/NGCP/Panel/Form/NCOS/ResellerLevel.pm index beb06224bd..49a39744c1 100644 --- a/lib/NGCP/Panel/Form/NCOSLevel.pm +++ b/lib/NGCP/Panel/Form/NCOS/ResellerLevel.pm @@ -1,7 +1,7 @@ -package NGCP::Panel::Form::NCOSLevel; +package NGCP::Panel::Form::NCOS::ResellerLevel; use HTML::FormHandler::Moose; -extends 'HTML::FormHandler::Model::DBIC'; +extends 'HTML::FormHandler'; use Moose::Util::TypeConstraints; use HTML::FormHandler::Widget::Block::Bootstrap; @@ -13,7 +13,7 @@ sub build_form_element_class {[qw(form-horizontal)]} has_field 'level' => ( type => 'Text', - label => 'Name', + label => 'Level Name', required => 1, ); diff --git a/share/templates/ncos/list.tt b/share/templates/ncos/list.tt index eb423e75eb..a4609768ad 100644 --- a/share/templates/ncos/list.tt +++ b/share/templates/ncos/list.tt @@ -1,10 +1,8 @@ [% META title = 'NCOS Levels' -%] [% helper.name = 'NCOS Levels'; - helper.show_create_button = 1; helper.messages = messages; - helper.column_titles = [ '#', 'Level', 'Mode', 'Description' ]; - helper.column_fields = [ 'id', 'level', 'mode', 'description' ]; + helper.dt_columns = level_dt_columns; helper.close_target = close_target; helper.create_flag = create_flag; @@ -12,14 +10,20 @@ helper.form_object = form; helper.ajax_uri = c.uri_for_action( "/ncos/ajax" ); - helper.dt_buttons = [ - { name = 'Edit', uri = "/ncos/'+full[\"id\"]+'/edit", class = 'btn-small btn-primary', icon = 'icon-edit' }, - { name = 'Delete', uri = "/ncos/'+full[\"id\"]+'/delete", class = 'btn-small btn-secondary', icon = 'icon-trash' }, - { name = 'Patterns', uri = "/ncos/'+full[\"id\"]+'/pattern", class = 'btn-small btn-tertiary', icon = 'icon-list' }, - ]; - helper.top_buttons = [ - { name = 'Create NCOS Level', uri = c.uri_for('/ncos/create'), icon = 'icon-star' }, - ]; + UNLESS c.user.read_only; + helper.dt_buttons = [ + { name = 'Edit', uri = "/ncos/'+full[\"id\"]+'/edit", class = 'btn-small btn-primary', icon = 'icon-edit' }, + { name = 'Delete', uri = "/ncos/'+full[\"id\"]+'/delete", class = 'btn-small btn-secondary', icon = 'icon-trash' }, + { name = 'Patterns', uri = "/ncos/'+full[\"id\"]+'/pattern", class = 'btn-small btn-tertiary', icon = 'icon-list' }, + ]; + helper.top_buttons = [ + { name = 'Create NCOS Level', uri = c.uri_for('/ncos/create'), icon = 'icon-star' }, + ]; + ELSE; + helper.dt_buttons = [ + { name = 'Patterns', uri = "/ncos/'+full[\"id\"]+'/pattern", class = 'btn-small btn-tertiary', icon = 'icon-list' }, + ]; + END; PROCESS 'helpers/datatables.tt'; -%] diff --git a/share/templates/ncos/pattern_list.tt b/share/templates/ncos/pattern_list.tt index 8de8d4006a..ecd0afea0c 100644 --- a/share/templates/ncos/pattern_list.tt +++ b/share/templates/ncos/pattern_list.tt @@ -2,10 +2,8 @@ [% helper.name = 'Number Pattern'; - helper.show_create_button = 1; helper.messages = messages; - helper.column_titles = [ '#', 'Pattern', 'Description' ]; - helper.column_fields = [ 'id', 'pattern', 'description' ]; + helper.dt_columns = pattern_dt_columns; helper.close_target = close_target; helper.create_flag = create_flag; @@ -13,15 +11,17 @@ helper.form_object = form; helper.ajax_uri = c.uri_for_action( "/ncos/pattern_ajax", [c.req.captures.0] ); - helper.tmpuri = c.uri_for_action( "/ncos/pattern_root", [c.req.captures.0] ) - helper.dt_buttons = [ - { name = 'Edit', uri = helper.tmpuri _ "/'+full[\"id\"]+'/edit", class = 'btn-small btn-primary', icon = 'icon-edit' }, - { name = 'Delete', uri = helper.tmpuri _ "/'+full[\"id\"]+'/delete", class = 'btn-small btn-secondary', icon = 'icon-trash' }, - ]; - helper.top_buttons = [ - { name = 'Back', uri = c.uri_for(), icon = 'icon-arrow-left' }, - { name = 'Create Pattern Entry', uri = c.uri_for_action( "/ncos/pattern_create", [c.req.captures.0] ), icon = 'icon-star' }, - ]; + helper.tmpuri = c.uri_for_action( "/ncos/pattern_root", [c.req.captures.0] ); + + UNLESS c.user.read_only; + helper.dt_buttons = [ + { name = 'Edit', uri = helper.tmpuri _ "/'+full.id+'/edit", class = 'btn-small btn-primary', icon = 'icon-edit' }, + { name = 'Delete', uri = helper.tmpuri _ "/'+full.id+'/delete", class = 'btn-small btn-secondary', icon = 'icon-trash' }, + ]; + helper.top_buttons = [ + { name = 'Create Pattern Entry', uri = c.uri_for_action( "/ncos/pattern_create", [c.req.captures.0] ), icon = 'icon-star' }, + ]; + END; PROCESS 'helpers/datatables.tt'; -%] diff --git a/share/templates/reseller/details.tt b/share/templates/reseller/details.tt index 26c8dc3f70..30b0ad1e03 100644 --- a/share/templates/reseller/details.tt +++ b/share/templates/reseller/details.tt @@ -36,6 +36,13 @@ helper.ajax_uri = c.uri_for_action('/reseller/reseller_single', c.req.captures ); helper.base_uri = c.uri_for_action('/reseller/root'); + UNLESS c.user.read_only; + helper.dt_buttons = [ + { name = 'Edit', uri = "/reseller/'+full.id+'/edit", class = 'btn-small btn-primary', icon = 'icon-edit' }, + { name = 'Terminate', uri = "/reseller/'+full.id+'/terminate", class = 'btn-small btn-secondary', icon = 'icon-remove' }, + ]; + END; + PROCESS 'helpers/datatables.tt'; -%] @@ -107,7 +114,13 @@ helper.edit_flag = edit_flag; helper.form_object = form; helper.ajax_uri = c.uri_for_action('/reseller/reseller_admin', c.req.captures ); - helper.base_uri = c.uri_for_action('/administrator/root'); + + UNLESS c.user.read_only; + helper.dt_buttons = [ + { name = 'Edit', uri = "/administrator/'+full.id+'/edit", class = 'btn-small btn-primary', icon = 'icon-edit' }, + { name = 'Delete', uri = "/administrator/'+full.id+'/delete", class = 'btn-small btn-secondary', icon = 'icon-trash' }, + ]; + END; PROCESS 'helpers/datatables.tt'; -%]