diff --git a/lib/NGCP/Panel/Controller/Contract.pm b/lib/NGCP/Panel/Controller/Contract.pm index 56d42ef0c8..7c9ae9c71f 100644 --- a/lib/NGCP/Panel/Controller/Contract.pm +++ b/lib/NGCP/Panel/Controller/Contract.pm @@ -32,6 +32,15 @@ sub list :Chained('/') :PathPart('contract') :CaptureArgs(0) { ]; $c->stash(contracts => $contracts); $c->stash(template => 'contract/list.tt'); + + 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}}; + } else { + $c->stash(close_target => $target); + } + } } sub root :Chained('list') :PathPart('') :Args(0) { @@ -48,10 +57,9 @@ sub create :Chained('list') :PathPart('create') :Args(0) { action => $c->uri_for('create'), ); if($form->validated) { - if($c->session->{redirect_targets} && @{ $c->session->{redirect_targets} }) { + if($c->stash->{close_target}) { # TODO: set created contract in flash to be selected at target - my $target = shift @{ $c->session->{redirect_targets} }; - $c->response->redirect($target); + $c->response->redirect($c->stash->{close_target}); return; } $c->flash(messages => [{type => 'success', text => 'Contract successfully created!'}]); @@ -59,11 +67,6 @@ sub create :Chained('list') :PathPart('create') :Args(0) { return; } - if($c->session->{redirect_targets} && @{ $c->session->{redirect_targets} }) { - $c->stash(close_target => ${ $c->session->{redirect_targets} }[0]); - } else { - $c->stash(close_target => $c->uri_for()); - } $c->stash(create_flag => 1); $c->stash(form => $form); } @@ -105,7 +108,6 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) { return; } - $c->stash(close_target => $c->uri_for()); $c->stash(form => $form); } diff --git a/lib/NGCP/Panel/Controller/Reseller.pm b/lib/NGCP/Panel/Controller/Reseller.pm index 64952c1613..150b47afce 100644 --- a/lib/NGCP/Panel/Controller/Reseller.pm +++ b/lib/NGCP/Panel/Controller/Reseller.pm @@ -32,6 +32,10 @@ sub list :Chained('/') :PathPart('reseller') :CaptureArgs(0) { ]; $c->stash(resellers => $resellers); $c->stash(template => 'reseller/list.tt'); + + # this is the root of a target chain for creating resellers->contracts->contacts, + # so clear chain here. + delete $c->session->{redirect_targets}; } sub root :Chained('list') :PathPart('') :Args(0) { @@ -58,6 +62,8 @@ sub create :Chained('list') :PathPart('create') :Args(0) { } else { $c->session->{redirect_targets} = [ $c->uri_for('create') ]; } + # TODO: preserve the current "reseller" object for continuing editing + # when coming back from /contract/create $c->response->redirect($c->uri_for('/contract/create')); return; } diff --git a/share/templates/helpers/table_form.tt b/share/templates/helpers/table_form.tt index aa7a1bc456..12cccb8bae 100644 --- a/share/templates/helpers/table_form.tt +++ b/share/templates/helpers/table_form.tt @@ -49,7 +49,7 @@ $(function () { $('#mod_edit').modal({keyboard: false, backdrop: 'static'}); $('#mod_close').click(function(event) { - window.location.href="[% helper.close_target %]"; + window.location.href="[% helper.close_target ? helper.close_target : c.uri_for() %]"; }); // on clicking a button within the form, add a hidden field "submitid"