Properly handle back button.

agranig/1_0_subfix
Andreas Granig 13 years ago
parent 21af84fdf6
commit e1f7a4710e

@ -148,6 +148,7 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) {
c => $c,
form => $form,
fields => {},
back_uri => $c->req->uri,
);
if ($posted && $form->validated) {
try {

@ -150,9 +150,8 @@ sub create :Chained('profile_list') :PathPart('create') :Args(0) {
} catch($e) {
$c->log->error("failed to create billing profile: $e");
$c->flash(messages => [{type => 'error', text => 'Failed to create billing profile'}]);
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for);
}
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for);
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/billing'));
}
$c->stash(close_target => $c->uri_for());

@ -45,6 +45,7 @@ sub create :Chained('list_contact') :PathPart('create') :Args(0) {
my $posted = ($c->request->method eq 'POST');
my $form;
my $params = {};
$params = $params->merge($c->session->{created_objects});
if($c->user->is_superuser && $no_reseller) {
$form = NGCP::Panel::Form::Contact::Reseller->new;
$params->{reseller}{id} = $c->user->reseller_id;
@ -63,7 +64,10 @@ sub create :Chained('list_contact') :PathPart('create') :Args(0) {
NGCP::Panel::Utils::Navigation::check_form_buttons(
c => $c,
form => $form,
fields => {},
fields => {
'reseller.create' => $c->uri_for('/reseller/create'),
},
back_uri => $c->req->uri,
);
if($posted && $form->validated) {
try {
@ -71,14 +75,14 @@ sub create :Chained('list_contact') :PathPart('create') :Args(0) {
delete $form->values->{reseller};
}
my $contact = $c->stash->{contacts}->create($form->values);
delete $c->session->{created_objects}->{reseller};
$c->session->{created_objects}->{contact} = { id => $contact->id };
$c->flash(messages => [{type => 'success', text => 'Contact successfully created'}]);
} catch($e) {
$c->log->error("failed to create contact: $e");
$c->flash(messages => [{type => 'error', text => 'Failed to create contact'}]);
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for_action('/contact/root'));
}
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for_action('/contact/root'));
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contact'));
}
$c->stash(create_flag => 1);
@ -96,7 +100,7 @@ sub base :Chained('list_contact') :PathPart('') :CaptureArgs(1) {
unless($contact_id && $contact_id->is_int) {
$c->flash(messages => [{type => 'error', text => 'Invalid contact id detected!'}]);
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for());
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contact'));
}
my $res = $c->stash->{contacts};
$c->stash(contact => $res->find($contact_id));
@ -119,11 +123,11 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) {
delete $form->params->{save};
$c->stash->{contact}->update($form->params);
$c->flash(messages => [{type => 'success', text => 'Contact successfully changed'}]);
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for_action('/contact/root'));
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contact'));
} catch($e) {
$c->log->error("failed to update contact: $e");
$c->flash(messages => [{type => 'error', text => 'Failed to update contact'}]);
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for_action('/contact/root'));
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contact'));
}
}
@ -143,7 +147,7 @@ sub delete :Chained('base') :PathPart('delete') :Args(0) {
$c->log->error("failed to delete contact: $e");
$c->flash(messages => [{type => 'error', text => 'Failed to delete contact'}]);
}
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for);
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contact'));
}
sub ajax :Chained('list_contact') :PathPart('ajax') :Args(0) {

@ -129,9 +129,8 @@ sub create :Chained('contract_list') :PathPart('create') :Args(0) {
} catch($e) {
$c->log->error("Failed to create contract: $e");
$c->flash(messages => [{type => 'error', text => 'Failed to create contract'}]);
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for_action('/contract/root'));
}
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for_action('/contract/root'));
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contract'));
}
$c->stash(create_flag => 1);
@ -148,7 +147,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!'}]);
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for);
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contract'));
}
my $res = $c->stash->{contract_select_rs};
@ -160,7 +159,7 @@ sub base :Chained('contract_list') :PathPart('') :CaptureArgs(1) {
unless(defined($res)) {
$c->flash(messages => [{type => 'error', text => 'Contract does not exist'}]);
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for);
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contract'));
}
$c->stash(contract => {$res->get_inflated_columns});
@ -229,9 +228,8 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) {
} catch($e) {
$c->log->error("failed to update contract: $e");
$c->flash(messages => [{type => 'error', text => 'Failed to update contract'}]);
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for);
}
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for);
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contract'));
}
$c->stash(form => $form);
@ -257,7 +255,7 @@ sub terminate :Chained('base') :PathPart('terminate') :Args(0) {
$c->log->info("failed to terminate contract: $e");
$c->flash(messages => [{type => 'error', text => 'Failed to terminate contract'}]);
};
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for);
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contract'));
}
sub ajax :Chained('contract_list') :PathPart('ajax') :Args(0) {
@ -340,9 +338,8 @@ sub peering_create :Chained('peering_list') :PathPart('create') :Args(0) {
} catch($e) {
$c->log->error("Failed to create contract: $e");
$c->flash(messages => [{type => 'error', text => 'Failed to create contract'}]);
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for_action('/contract/root'));
}
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for_action('/contract/root'));
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contract'));
}
$c->stash(create_flag => 1);
@ -419,9 +416,8 @@ sub customer_create :Chained('customer_list') :PathPart('create') :Args(0) {
} catch($e) {
$c->log->error("Failed to create contract: $e");
$c->flash(messages => [{type => 'error', text => 'Failed to create contract'}]);
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for_action('/contract/root'));
}
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for_action('/contract/root'));
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/contract'));
}
$c->stash(create_flag => 1);

@ -20,7 +20,9 @@ sub list_reseller :Chained('/') :PathPart('reseller') :CaptureArgs(0) {
$c->stash(
resellers => $c->model('DB')
->resultset('resellers')->search_rs({}),
->resultset('resellers')->search({
status => { '!=' => 'terminated' }
}),
template => 'reseller/list.tt'
);
@ -89,7 +91,7 @@ sub create :Chained('list_reseller') :PathPart('create') :Args(0) {
$c->log->error($e);
$c->flash(messages => [{type => 'error', text => 'Failed to create reseller'}]);
}
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for());
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/reseller'));
}
$c->stash(create_flag => 1);
@ -138,8 +140,6 @@ sub base :Chained('list_reseller') :PathPart('') :CaptureArgs(1) {
sub reseller_contacts :Chained('base') :PathPart('contacts') :Args(0) {
my ($self, $c) = @_;
use Data::Printer;
p $c->stash->{contact_dt_columns};
my $rs = $c->stash->{reseller}->first->contract->search_related_rs('contact');
NGCP::Panel::Utils::Datatables::process($c, $rs, $c->stash->{contact_dt_columns});
$c->detach($c->view('JSON'));
@ -233,7 +233,7 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) {
$c->log->error($e);
$c->flash(messages => [{type => 'error', text => 'Failed to update reseller'}]);
}
NGCP::Utils::Navigation::back_or($c, $c->uri_for);
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/reseller'));
}
$c->stash(close_target => $c->uri_for());
@ -254,7 +254,7 @@ sub terminate :Chained('base') :PathPart('terminate') :Args(0) {
if($reseller->status ne $old_status) {
my $contract = $reseller->contract;
$contract->update({ status => $c->stash->{reseller}->first->status });
$contract->update({ status => $reseller->status });
NGCP::Panel::Utils::Contract::recursively_lock_contract(
c => $c,
contract => $contract,
@ -266,7 +266,7 @@ sub terminate :Chained('base') :PathPart('terminate') :Args(0) {
$c->log->error("failed to terminate reseller: $e");
$c->flash(messages => [{type => 'error', text => 'Failed to terminate reseller'}]);
}
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for);
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/reseller'));
}
sub details :Chained('base') :PathPart('details') :Args(0) {

@ -85,12 +85,9 @@ sub process {
if(defined(my $row = $rs->find($topId))) {
push @{ $aaData }, _prune_row($cols, $row->get_inflated_columns);
$rs = $rs->search({ 'me.id' => { '!=', $topId} });
} else {
$c->log->error("iIdOnTop id $topId not found in resultset " . ref $rs);
}
}
# sorting
my $sortColumn = $c->request->params->{iSortCol_0};
my $sortDirection = $c->request->params->{sSortDir_0} || 'asc';

@ -10,16 +10,6 @@ sub check_redirect_chain {
# TODO: check for missing fields
my $c = $params{c};
if($c->session->{redirect_targets} && @{ $c->session->{redirect_targets} }) {
my $target = ${ $c->session->{redirect_targets} }[0];
if('/'.$c->request->path eq $target->path) {
shift @{$c->session->{redirect_targets}};
$c->stash(close_target => ${ $c->session->{redirect_targets} }[0]);
} else {
$c->stash(close_target => $target);
}
}
if($c->request->params->{back}) {
my $back_uri = URI->new(uri_decode($c->request->params->{back}));
$back_uri->query_param_delete('back');
@ -30,6 +20,16 @@ sub check_redirect_chain {
$c->session->{redirect_targets} = [ $back_uri ];
}
}
if(@{ $c->session->{redirect_targets} }) {
my $target = ${ $c->session->{redirect_targets} }[0];
if('/'.$c->request->path eq $target->path) {
shift @{$c->session->{redirect_targets}};
$c->stash(close_target => ${ $c->session->{redirect_targets} }[0]);
} else {
$c->stash(close_target => $target);
}
}
}
sub check_form_buttons {

@ -14,7 +14,7 @@
UNLESS c.user.read_only;
helper.dt_buttons = [
{ name = 'Edit', uri = "/contract/'+full.id+'/edit", class = 'btn-small btn-primary', icon = 'icon-edit' },
{ name = 'Terminate', uri = "/contract/'+full.id+'/terminate", class = 'btn-small btn-primary', icon = 'icon-remove' },
{ name = 'Terminate', uri = "/contract/'+full.id+'/terminate", class = 'btn-small btn-secondary', icon = 'icon-remove' },
];
helper.top_buttons = [
{ name = 'Create Contract', uri = c.uri_for('/contract/create'), icon = 'icon-star' },

Loading…
Cancel
Save