diff --git a/debian/control b/debian/control index 2424c3fcd0..e4e9986335 100644 --- a/debian/control +++ b/debian/control @@ -30,6 +30,7 @@ Build-Depends: debhelper (>= 8), libsys-sig-perl, libtext-csv-xs-perl, libtrycatch-perl, + libhash-merge-perl, ngcp-schema Standards-Version: 3.9.4 Homepage: http://sipwise.com/ diff --git a/lib/NGCP/Panel/Controller/Administrator.pm b/lib/NGCP/Panel/Controller/Administrator.pm index 846aabccff..4541d656a7 100644 --- a/lib/NGCP/Panel/Controller/Administrator.pm +++ b/lib/NGCP/Panel/Controller/Administrator.pm @@ -9,6 +9,7 @@ use NGCP::Panel::Utils::Navigation; sub auto :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) :AllowedRole(reseller) { my ($self, $c) = @_; $c->log->debug(__PACKAGE__ . '::auto'); + NGCP::Panel::Utils::Navigation::check_redirect_chain(c => $c); return 1; } @@ -84,11 +85,11 @@ sub create :Chained('list_admin') :PathPart('create') :Args(0) { params => $c->request->params, action => $c->uri_for('create'), ); - return if NGCP::Panel::Utils::Navigation::check_form_buttons( + NGCP::Panel::Utils::Navigation::check_form_buttons( c => $c, form => $form, fields => [qw(administrator.create)], - back_uri => $c->uri_for('create') + back_uri => $c->req->uri, ); if ($form->validated) { try { diff --git a/lib/NGCP/Panel/Controller/Billing.pm b/lib/NGCP/Panel/Controller/Billing.pm index 4633c35140..6e58e30a69 100644 --- a/lib/NGCP/Panel/Controller/Billing.pm +++ b/lib/NGCP/Panel/Controller/Billing.pm @@ -22,14 +22,13 @@ my @WEEKDAYS = map { langinfo($_) } (DAY_2, DAY_3, DAY_4, DAY_5, DAY_6, DAY_7, D sub auto :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) :AllowedRole(reseller) { my ($self, $c) = @_; $c->log->debug(__PACKAGE__ . '::auto'); + NGCP::Panel::Utils::Navigation::check_redirect_chain(c => $c); return 1; } sub profile_list :Chained('/') :PathPart('billing') :CaptureArgs(0) { my ( $self, $c ) = @_; - NGCP::Panel::Utils::Navigation::check_redirect_chain(c => $c); - my $dispatch_to = '_profile_resultset_' . $c->user->auth_realm; my $profiles_rs = $self->$dispatch_to($c); $c->stash(profiles_rs => $profiles_rs); @@ -193,7 +192,7 @@ sub fees_create :Chained('fees_list') :PathPart('create') :Args(0) { params => $c->request->params, action => $c->uri_for($profile_id, 'fees', 'create'), ); - return if NGCP::Panel::Utils::Navigation::check_form_buttons( + NGCP::Panel::Utils::Navigation::check_form_buttons( c => $c, form => $form, fields => {'billing_zone.create' => $c->uri_for("$profile_id/zones/create")}, back_uri => $c->req->uri, @@ -278,7 +277,7 @@ sub fees_edit :Chained('fees_base') :PathPart('edit') :Args(0) { params => $posted ? $c->request->params : $c->stash->{fee}, action => $c->uri_for($profile_id,'fees',$c->stash->{fee}->{id}, 'edit'), ); - return if NGCP::Panel::Utils::Navigation::check_form_buttons( + NGCP::Panel::Utils::Navigation::check_form_buttons( c => $c, form => $form, fields => {'billing_zone.create' => $c->uri_for("$profile_id/zones/create")}, back_uri => $c->req->uri, diff --git a/lib/NGCP/Panel/Controller/Contact.pm b/lib/NGCP/Panel/Controller/Contact.pm index accac8b54a..8c6937500a 100644 --- a/lib/NGCP/Panel/Controller/Contact.pm +++ b/lib/NGCP/Panel/Controller/Contact.pm @@ -4,10 +4,12 @@ use namespace::sweep; BEGIN { extends 'Catalyst::Controller'; } use NGCP::Panel::Form::Contact; +use NGCP::Panel::Utils::Navigation; sub auto :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) :AllowedRole(reseller) { my ($self, $c) = @_; $c->log->debug(__PACKAGE__ . '::auto'); + NGCP::Panel::Utils::Navigation::check_redirect_chain(c => $c); return 1; } diff --git a/lib/NGCP/Panel/Controller/Contract.pm b/lib/NGCP/Panel/Controller/Contract.pm index e8d81a8f30..15e170a502 100644 --- a/lib/NGCP/Panel/Controller/Contract.pm +++ b/lib/NGCP/Panel/Controller/Contract.pm @@ -9,6 +9,7 @@ use NGCP::Panel::Utils::Contract; sub auto :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) :AllowedRole(reseller) { my ($self, $c) = @_; $c->log->debug(__PACKAGE__ . '::auto'); + NGCP::Panel::Utils::Navigation::check_redirect_chain(c => $c); return 1; } @@ -52,8 +53,6 @@ sub contract_list :Chained('/') :PathPart('contract') :CaptureArgs(0) { $c->stash(contract_select_rs => $rs); $c->stash(ajax_uri => $c->uri_for_action("/contract/ajax")); $c->stash(template => 'contract/list.tt'); - - NGCP::Panel::Utils::Navigation::check_redirect_chain(c => $c); } sub root :Chained('contract_list') :PathPart('') :Args(0) { @@ -87,30 +86,18 @@ sub create :Chained('contract_list') :PathPart('create') :Args(0) { # redirect to correct entry point $c->log->error("Failed to create contract balance: $e"); $c->flash(messages => [{type => 'error', text => 'Failed to create contract balance!'}]); - - if($c->stash->{close_target}) { - $c->response->redirect($c->stash->{close_target}); - return; - } - $c->response->redirect($c->uri_for_action('/contract/root')); - return; + NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for_action('/contract/root')); } } - return if NGCP::Panel::Utils::Navigation::check_form_buttons( + NGCP::Panel::Utils::Navigation::check_form_buttons( c => $c, form => $form, fields => {'contract.contact.create' => $c->uri_for('/contact/create'), 'billing_profile.create' => $c->uri_for('/billing/create')}, - back_uri => $c->uri_for('create') + back_uri => $c->req->uri, ); if($form->validated) { $c->flash(messages => [{type => 'success', text => 'Contract successfully created!'}]); - - if($c->stash->{close_target}) { - $c->response->redirect($c->stash->{close_target}); - return; - } - $c->response->redirect($c->uri_for_action('/contract/root')); - return; + NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for_action('/contract/root')); } $c->stash(create_flag => 1); @@ -122,9 +109,7 @@ sub base :Chained('contract_list') :PathPart('') :CaptureArgs(1) { unless($contract_id && $contract_id->is_integer) { $c->flash(messages => [{type => 'error', text => 'Invalid contract id detected!'}]); - $c->response->redirect($c->uri_for()); - $c->detach; - return; + NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for); } my $res = $c->stash->{contract_select_rs} @@ -136,9 +121,7 @@ sub base :Chained('contract_list') :PathPart('') :CaptureArgs(1) { unless(defined($res)) { $c->flash(messages => [{type => 'error', text => 'Contract does not exist!'}]); - $c->response->redirect($c->uri_for()); - $c->detach; - return; + NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for); } $c->stash(contract => {$res->get_inflated_columns}); @@ -168,16 +151,15 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) { item => $item, action => $c->uri_for($c->stash->{contract}->{id}, 'edit'), ); - return if NGCP::Panel::Utils::Navigation::check_form_buttons( + NGCP::Panel::Utils::Navigation::check_form_buttons( c => $c, form => $form, fields => {'contract.contact.create' => $c->uri_for('/contact/create'), 'billing_profile.create' => $c->uri_for('/billing/create')}, - back_uri => $c->uri_for($c->stash->{contract}->{id}, 'edit') + back_uri => $c->req->uri, ); if($posted && $form->validated) { $c->flash(messages => [{type => 'success', text => 'Contract successfully changed!'}]); - $c->response->redirect($c->uri_for()); - return; + NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for); } $c->stash(form => $form); @@ -194,7 +176,7 @@ sub delete :Chained('base') :PathPart('delete') :Args(0) { $c->flash(messages => [{type => 'error', text => 'Delete failed.'}]); $c->log->info("Delete failed: " . $e); }; - $c->response->redirect($c->uri_for()); + NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for); } sub ajax :Chained('contract_list') :PathPart('ajax') :Args(0) { @@ -262,29 +244,18 @@ sub peering_create :Chained('peering_list') :PathPart('create') :Args(0) { # redirect to correct entry point $c->log->error($e); $c->flash(messages => [{type => 'error', text => 'Failed to create contract balance!'}]); - if($c->stash->{close_target}) { - $c->response->redirect($c->stash->{close_target}); - return; - } - $c->response->redirect($c->uri_for_action('/contract/root')); - return; + NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for_action('/contract/root')); } } - return if NGCP::Panel::Utils::Navigation::check_form_buttons( + NGCP::Panel::Utils::Navigation::check_form_buttons( c => $c, form => $form, fields => {'contract.contact.create' => $c->uri_for('/contact/create'), 'billing_profile.create' => $c->uri_for('/billing/create')}, - back_uri => $c->uri_for('create') + back_uri => $c->req->uri, ); if($form->validated) { $c->flash(messages => [{type => 'success', text => 'Contract successfully created!'}]); - - if($c->stash->{close_target}) { - $c->response->redirect($c->stash->{close_target}); - return; - } - $c->response->redirect($c->uri_for_action('/contract/root')); - return; + NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for_action('/contract/root')); } $c->stash(create_flag => 1); @@ -344,24 +315,18 @@ sub customer_create :Chained('customer_list') :PathPart('create') :Args(0) { # redirect to correct entry point $c->log->error($e); $c->flash(messages => [{type => 'error', text => 'Failed to create contract balance!'}]); - if($c->stash->{close_target}) { - $c->response->redirect($c->stash->{close_target}); - return; - } - $c->response->redirect($c->uri_for('/customer')); - return; + NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/customer')); } } - return if NGCP::Panel::Utils::Navigation::check_form_buttons( + NGCP::Panel::Utils::Navigation::check_form_buttons( c => $c, form => $form, fields => {'contract.contact.create' => $c->uri_for('/contact/create'), 'billing_profile.create' => $c->uri_for('/billing/create')}, - back_uri => $c->uri_for('create') + back_uri => $c->req->uri, ); if($form->validated) { $c->flash(messages => [{type => 'success', text => 'Contract successfully created!'}]); - $c->response->redirect($c->uri_for_action('/customer/details', [$item->contract->id])); - return; + NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for_action('/customer/details', [$item->contract->id])); } $c->stash(create_flag => 1); diff --git a/lib/NGCP/Panel/Controller/Customer.pm b/lib/NGCP/Panel/Controller/Customer.pm index 5ed7fc1ad4..73909657b7 100644 --- a/lib/NGCP/Panel/Controller/Customer.pm +++ b/lib/NGCP/Panel/Controller/Customer.pm @@ -25,6 +25,7 @@ Catalyst Controller. sub auto :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) :AllowedRole(reseller) { my ($self, $c) = @_; $c->log->debug(__PACKAGE__ . '::auto'); + NGCP::Panel::Utils::Navigation::check_redirect_chain(c => $c); return 1; } @@ -34,7 +35,6 @@ sub list_customer :Chained('/') :PathPart('customer') :CaptureArgs(0) { $c->stash( template => 'customer/list.tt' ); - NGCP::Panel::Utils::Navigation::check_redirect_chain(c => $c); } sub root :Chained('list_customer') :PathPart('') :Args(0) { @@ -127,11 +127,11 @@ sub subscriber_create :Chained('base') :PathPart('subscriber/create') :Args(0) { posted => ($c->request->method eq 'POST'), params => $c->request->params, ); - return if NGCP::Panel::Utils::Navigation::check_form_buttons( + NGCP::Panel::Utils::Navigation::check_form_buttons( c => $c, form => $form, fields => [qw/domain.create/], - back_uri => $c->uri_for_action('/customer/subscriber_create', [ $c->req->captures->[0]]), + back_uri => $c->req->uri, ); if($form->validated) { my $schema = $c->model('DB'); diff --git a/lib/NGCP/Panel/Controller/Domain.pm b/lib/NGCP/Panel/Controller/Domain.pm index 454ef807ba..e52922304f 100644 --- a/lib/NGCP/Panel/Controller/Domain.pm +++ b/lib/NGCP/Panel/Controller/Domain.pm @@ -5,10 +5,12 @@ use namespace::autoclean; BEGIN { extends 'Catalyst::Controller'; } use NGCP::Panel::Form::Domain; +use NGCP::Panel::Utils::Navigation; sub auto :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) :AllowedRole(reseller) { my ($self, $c) = @_; $c->log->debug(__PACKAGE__ . '::auto'); + NGCP::Panel::Utils::Navigation::check_redirect_chain(c => $c); return 1; } diff --git a/lib/NGCP/Panel/Controller/NCOS.pm b/lib/NGCP/Panel/Controller/NCOS.pm index 15cb8b608b..7a3c19cafd 100644 --- a/lib/NGCP/Panel/Controller/NCOS.pm +++ b/lib/NGCP/Panel/Controller/NCOS.pm @@ -6,11 +6,13 @@ BEGIN { extends 'Catalyst::Controller'; } use NGCP::Panel::Form::NCOSLevel; use NGCP::Panel::Form::NCOSPattern; +use NGCP::Panel::Utils::Navigation; use HTML::FormHandler; sub auto :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) :AllowedRole(reseller) { my ($self, $c) = @_; $c->log->debug(__PACKAGE__ . '::auto'); + NGCP::Panel::Utils::Navigation::check_redirect_chain(c => $c); return 1; } diff --git a/lib/NGCP/Panel/Controller/Peering.pm b/lib/NGCP/Panel/Controller/Peering.pm index 9ad1cf11fe..f229412190 100644 --- a/lib/NGCP/Panel/Controller/Peering.pm +++ b/lib/NGCP/Panel/Controller/Peering.pm @@ -9,18 +9,18 @@ use NGCP::Panel::Form::PeeringGroup; use NGCP::Panel::Form::PeeringRule; use NGCP::Panel::Form::PeeringServer; use NGCP::Panel::Utils::XMLDispatcher; +use NGCP::Panel::Utils::Navigation; sub auto :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) { my ($self, $c) = @_; $c->log->debug(__PACKAGE__ . '::auto'); + NGCP::Panel::Utils::Navigation::check_redirect_chain(c => $c); return 1; } sub group_list :Chained('/') :PathPart('peering') :CaptureArgs(0) { my ( $self, $c ) = @_; - NGCP::Panel::Utils::Navigation::check_redirect_chain(c => $c); - $c->stash(template => 'peering/list.tt'); } @@ -72,13 +72,11 @@ sub edit :Chained('base') :PathPart('edit') { params => $posted ? $c->request->params : $c->stash->{group}, action => $c->uri_for_action('/peering/edit', [$c->req->captures->[0]]) ); - if (NGCP::Panel::Utils::Navigation::check_form_buttons( + NGCP::Panel::Utils::Navigation::check_form_buttons( c => $c, form => $form, fields => {'contract.create' => $c->uri_for('/contract/peering/create')}, back_uri => $c->req->uri, - )) { - return; - } + ); if($posted && $form->validated) { try { $c->stash->{group_result}->update($form->custom_get_values); @@ -119,13 +117,11 @@ sub create :Chained('group_list') :PathPart('create') :Args(0) { params => $c->request->params, action => $c->uri_for('create'), ); - if (NGCP::Panel::Utils::Navigation::check_form_buttons( + NGCP::Panel::Utils::Navigation::check_form_buttons( c => $c, form => $form, fields => {'contract.create' => $c->uri_for('/contract/peering/create')}, back_uri => $c->req->uri, - )) { - return; - } + ); if($form->validated) { my $formdata = $form->custom_get_values; try { diff --git a/lib/NGCP/Panel/Controller/Reseller.pm b/lib/NGCP/Panel/Controller/Reseller.pm index 61ff880a71..e92b7d973a 100644 --- a/lib/NGCP/Panel/Controller/Reseller.pm +++ b/lib/NGCP/Panel/Controller/Reseller.pm @@ -10,6 +10,7 @@ use NGCP::Panel::Utils::Navigation; sub auto :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) { my ($self, $c) = @_; $c->log->debug(__PACKAGE__ . '::auto'); + NGCP::Panel::Utils::Navigation::check_redirect_chain(c => $c); return 1; } @@ -28,8 +29,6 @@ sub list_reseller :Chained('/') :PathPart('reseller') :CaptureArgs(0) { { name => "name", search => 1, title => "Name" }, { name => "status", search => 1, title => "Status" }, ]); - - NGCP::Panel::Utils::Navigation::check_redirect_chain(c => $c); } sub root :Chained('list_reseller') :PathPart('') :Args(0) { @@ -60,16 +59,15 @@ sub create :Chained('list_reseller') :PathPart('create') :Args(0) { params => $c->request->params, action => $c->uri_for('create'), ); - return if NGCP::Panel::Utils::Navigation::check_form_buttons( + NGCP::Panel::Utils::Navigation::check_form_buttons( c => $c, form => $form, fields => [qw/contract.create/], - back_uri => $c->uri_for('create') + back_uri => $c->req->uri, ); if($form->validated) { try { - delete $form->params->{save}; $form->params->{contract_id} = delete $form->params->{contract}->{id}; delete $form->params->{contract}; $c->model('DB')->resultset('resellers')->create($form->params); @@ -100,7 +98,7 @@ sub base :Chained('list_reseller') :PathPart('') :CaptureArgs(1) { return; } - $c->stash(reseller => $c->stash->{resellers}->find($reseller_id)); + $c->stash(reseller => $c->stash->{resellers}->search_rs({ id => $reseller_id })); } sub reseller_contacts :Chained('base') :PathPart('contacts') :Args(0) { @@ -177,24 +175,28 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) { my $posted = $c->request->method eq 'POST'; my $form = NGCP::Panel::Form::Reseller->new; - my $params = delete $c->session->{created_object} || {}; + my $params = { $c->stash->{reseller}->first->get_inflated_columns }; + $params->{contract}{id} = delete $params->{contract_id}; + if($c->session->{created_object}) { # got a contract id from next step + use Hash::Merge; + $params = Hash::Merge->new('RIGHT_PRECEDENT')->merge($params, delete $c->session->{created_object}); + } $form->process( posted => $posted, - item => $params, params => $c->request->params, - action => $c->uri_for($c->stash->{reseller}->get_column('id'), 'edit'), + item => $params, + action => $c->request->uri, ); - return if NGCP::Panel::Utils::Navigation::check_form_buttons( + NGCP::Panel::Utils::Navigation::check_form_buttons( c => $c, form => $form, fields => [qw/contract.create/], - back_uri => $c->uri_for($c->stash->{reseller}->get_column('id'), 'edit') + back_uri => $c->req->uri, ); if($posted && $form->validated) { try { - my $form_values = $form->value; - $form_values->{contract_id} = delete $form_values->{contract}{id}; - delete $form_values->{contract}; - $c->stash->{reseller}->update($form_values); + $form->params->{contract_id} = delete $form->params->{contract}{id}; + delete $form->params->{contract}; + $c->stash->{reseller}->first->update($form->params); $c->flash(messages => [{type => 'success', text => 'Reseller successfully changed.'}]); delete $c->session->{contract_id}; } catch($e) { @@ -208,7 +210,7 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) { $c->stash(form => $form); $c->stash(edit_flag => 1); - $c->session(contract_id => $c->stash->{reseller}->get_column('contract_id')); + $c->session(contract_id => $c->stash->{reseller}->first->get_column('contract_id')); return; } @@ -217,7 +219,7 @@ sub delete :Chained('base') :PathPart('delete') :Args(0) { my ($self, $c) = @_; try { - $c->stash->{reseller}->delete; + $c->stash->{reseller}->first->delete; $c->flash(messages => [{type => 'success', text => 'Reseller successfully deleted.'}]); } catch($e) { $c->log->error($e); diff --git a/lib/NGCP/Panel/Controller/Rewrite.pm b/lib/NGCP/Panel/Controller/Rewrite.pm index e62d5992bd..3bc298ec08 100644 --- a/lib/NGCP/Panel/Controller/Rewrite.pm +++ b/lib/NGCP/Panel/Controller/Rewrite.pm @@ -7,10 +7,12 @@ BEGIN { extends 'Catalyst::Controller'; } use NGCP::Panel::Form::RewriteRuleSet; use NGCP::Panel::Form::RewriteRule; use NGCP::Panel::Utils::XMLDispatcher; +use NGCP::Panel::Utils::Navigation; sub auto :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) :AllowedRole(reseller) { my ($self, $c) = @_; $c->log->debug(__PACKAGE__ . '::auto'); + NGCP::Panel::Utils::Navigation::check_redirect_chain(c => $c); return 1; } diff --git a/lib/NGCP/Panel/Controller/Sound.pm b/lib/NGCP/Panel/Controller/Sound.pm index e00b1a79b7..0eca80e326 100644 --- a/lib/NGCP/Panel/Controller/Sound.pm +++ b/lib/NGCP/Panel/Controller/Sound.pm @@ -9,10 +9,12 @@ use NGCP::Panel::Form::SoundFile; use File::Type; use NGCP::Panel::Utils::XMLDispatcher; use NGCP::Panel::Utils::Sounds; +use NGCP::Panel::Utils::Navigation; sub auto :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) :AllowedRole(reseller) { my ($self, $c) = @_; $c->log->debug(__PACKAGE__ . '::auto'); + NGCP::Panel::Utils::Navigation::check_redirect_chain(c => $c); return 1; } diff --git a/lib/NGCP/Panel/Controller/Statistics.pm b/lib/NGCP/Panel/Controller/Statistics.pm index 1da02e7986..242a5410eb 100644 --- a/lib/NGCP/Panel/Controller/Statistics.pm +++ b/lib/NGCP/Panel/Controller/Statistics.pm @@ -6,24 +6,14 @@ BEGIN { extends 'Catalyst::Controller'; } use Sipwise::Base; use NGCP::Panel::Utils::Statistics; use NGCP::Panel::Form::Statistics; +use NGCP::Panel::Utils::Navigation; use Sys::Hostname; -=head1 NAME - -NGCP::Panel::Controller::Statistics - Catalyst Controller - -=head1 DESCRIPTION - -Catalyst Controller. - -=head1 METHODS - -=cut - sub auto :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) { my ($self, $c) = @_; $c->log->debug(__PACKAGE__ . '::auto'); + NGCP::Panel::Utils::Navigation::check_redirect_chain(c => $c); return 1; } diff --git a/lib/NGCP/Panel/Controller/Subscriber.pm b/lib/NGCP/Panel/Controller/Subscriber.pm index 57de014d4b..5254c24cb1 100644 --- a/lib/NGCP/Panel/Controller/Subscriber.pm +++ b/lib/NGCP/Panel/Controller/Subscriber.pm @@ -50,6 +50,7 @@ Catalyst Controller. sub auto :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) :AllowedRole(reseller) { my ($self, $c) = @_; $c->log->debug(__PACKAGE__ . '::auto'); + NGCP::Panel::Utils::Navigation::check_redirect_chain(c => $c); return 1; } @@ -67,8 +68,6 @@ sub sub_list :Chained('/') :PathPart('subscriber') :CaptureArgs(0) { { name => "status", search => 1, title => "Status" }, { name => "contract_id", search => 1, title => "Contract #"}, ]); - #NGCP::Panel::Utils::Navigation::check_redirect_chain(c => $c); - } sub root :Chained('sub_list') :PathPart('') :Args(0) { @@ -85,11 +84,11 @@ sub create_list :Chained('sub_list') :PathPart('create') :Args(0) { params => $c->request->params, action => $c->uri_for('/subscriber/create'), ); - return if NGCP::Panel::Utils::Navigation::check_form_buttons( + NGCP::Panel::Utils::Navigation::check_form_buttons( c => $c, form => $form, fields => [qw/domain.create/], - back_uri => $c->uri_for('/subscriber/create'), + back_uri => $c->req->uri, ); if($form->validated) { my $schema = $c->model('DB'); @@ -479,7 +478,7 @@ sub preferences_callforward :Chained('base') :PathPart('preferences/callforward' params => $params, ); - return if NGCP::Panel::Utils::Navigation::check_form_buttons( + NGCP::Panel::Utils::Navigation::check_form_buttons( c => $c, form => $cf_form, fields => { 'cf_actions.advanced' => @@ -487,7 +486,7 @@ sub preferences_callforward :Chained('base') :PathPart('preferences/callforward' [$c->req->captures->[0]], $cf_type, 'advanced' ), }, - back_uri => $c->uri_for($c->action, $c->req->captures) + back_uri => $c->req->uri, ); if($posted && $cf_form->validated) { @@ -667,7 +666,7 @@ sub preferences_callforward_advanced :Chained('base') :PathPart('preferences/cal ); - return if NGCP::Panel::Utils::Navigation::check_form_buttons( + NGCP::Panel::Utils::Navigation::check_form_buttons( c => $c, form => $cf_form, fields => { 'cf_actions.simple' => @@ -683,8 +682,7 @@ sub preferences_callforward_advanced :Chained('base') :PathPart('preferences/cal [$c->req->captures->[0]], $cf_type, ), }, - back_uri => $c->uri_for_action('/subscriber/preferences_callforward_advanced', - [$c->req->captures->[0]], $cf_type, 'advanced'), + back_uri => $c->req->uri, ); diff --git a/lib/NGCP/Panel/Utils/Navigation.pm b/lib/NGCP/Panel/Utils/Navigation.pm index f2c8d8977e..b69ba4bbc0 100644 --- a/lib/NGCP/Panel/Utils/Navigation.pm +++ b/lib/NGCP/Panel/Utils/Navigation.pm @@ -35,6 +35,7 @@ sub check_form_buttons { if (ref($fields) eq "ARRAY"); my $posted = ($c->request->method eq 'POST'); + delete $form->params->{save} if $posted; if($posted && $form->field('submitid')) { my $val = $form->value->{submitid}; @@ -54,10 +55,16 @@ sub check_form_buttons { $c->session->{redirect_targets} = [ $back_uri ]; } $c->response->redirect($target); - return 1; + $c->detach(); } } - return; +} + +sub back_or { + my ($c, $alternative_target) = @_; + my $target = $c->stash->{close_target} || $alternative_target || $c->req->uri; + $c->response->redirect($target); + $c->detach(); } 1;