Enhance navigation.

Simplify back-uri for navigation utils calls.
Start using back_or navigation utils function for auto-checking
close-targets.
Move navigation stack check into auto of each controller.
agranig/1_0_subfix
Andreas Granig 12 years ago
parent 264a5460da
commit 0b37392f54

1
debian/control vendored

@ -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/

@ -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 {

@ -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,

@ -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;
}

@ -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);

@ -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');

@ -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;
}

@ -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;
}

@ -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 {

@ -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);

@ -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;
}

@ -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;
}

@ -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;
}

@ -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,
);

@ -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;

Loading…
Cancel
Save