From 072d5b8b61caa4366d1ccf25c59f1a0db9bf23bc Mon Sep 17 00:00:00 2001 From: Andreas Granig Date: Tue, 30 Jul 2013 16:58:51 +0200 Subject: [PATCH] Align peering handling to usual controller flow. Use navigation utils. Make required fields required. --- lib/NGCP/Panel/Controller/Peering.pm | 123 +++++++++++++++----------- lib/NGCP/Panel/Controller/Reseller.pm | 31 +++---- lib/NGCP/Panel/Form/PeeringServer.pm | 3 + 3 files changed, 90 insertions(+), 67 deletions(-) diff --git a/lib/NGCP/Panel/Controller/Peering.pm b/lib/NGCP/Panel/Controller/Peering.pm index 899b0ccccf..d34dcf8a3d 100644 --- a/lib/NGCP/Panel/Controller/Peering.pm +++ b/lib/NGCP/Panel/Controller/Peering.pm @@ -156,10 +156,6 @@ sub create :Chained('group_list') :PathPart('create') :Args(0) { sub servers_list :Chained('base') :PathPart('servers') :CaptureArgs(0) { my ($self, $c) = @_; - - my $sr_list_uri = $c->uri_for_action( - '/peering/servers_root', [$c->req->captures->[0]]); - $c->stash(sr_list_uri => $sr_list_uri); $c->stash(template => 'peering/servers_rules.tt'); } @@ -182,28 +178,35 @@ sub servers_ajax :Chained('servers_list') :PathPart('s_ajax') :Args(0) { sub servers_create :Chained('servers_list') :PathPart('create') :Args(0) { my ($self, $c) = @_; + my $posted = ($c->request->method eq 'POST'); my $form = NGCP::Panel::Form::PeeringServer->new; $form->process( - posted => ($c->request->method eq 'POST'), + posted => $posted, params => $c->request->params, - action => $c->uri_for_action('/peering/servers_create', [$c->req->captures->[0]]), ); - if($form->validated) { + NGCP::Panel::Utils::Navigation::check_form_buttons( + c => $c, + form => $form, + fields => {}, + back_uri => $c->req->uri + ); + if($posted && $form->validated) { try { - $c->stash->{group_result}->voip_peer_hosts->create( $form->fif ); + $c->stash->{group_result}->voip_peer_hosts->create($form->values); $self->_sip_lcr_reload; $c->flash(messages => [{type => 'success', text => 'Peering server successfully created'}]); } catch (DBIx::Class::Exception $e) { + $c->log->error("failed to create peering server: $e"); $c->flash(messages => [{type => 'error', text => 'Failed to create peering server'}]); - $c->log->info("Create failed: " . $e); }; - $c->response->redirect($c->stash->{sr_list_uri}); - return; + NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for_action('/peering/servers_root', [$c->req->captures->[0]])); } - $c->stash(close_target => $c->stash->{sr_list_uri}); - $c->stash(servers_create_flag => 1); - $c->stash(servers_form => $form); + $c->stash( + close_target => $c->uri_for_action('/peering/servers_root', [$c->req->captures->[0]]), + servers_create_flag => 1, + servers_form => $form + ); } sub servers_base :Chained('servers_list') :PathPart('') :CaptureArgs(1) { @@ -233,27 +236,33 @@ sub servers_edit :Chained('servers_base') :PathPart('edit') :Args(0) { my $posted = ($c->request->method eq 'POST'); my $form = NGCP::Panel::Form::PeeringServer->new; $form->process( - posted => 1, - params => $posted ? $c->request->params : $c->stash->{server}, - action => $c->uri_for_action('/peering/servers_edit', $c->req->captures) + posted => $posted, + params => $c->request->params, + item => $c->stash->{server}, + ); + NGCP::Panel::Utils::Navigation::check_form_buttons( + c => $c, + form => $form, + fields => {}, + back_uri => $c->req->uri ); if($posted && $form->validated) { try { - $c->stash->{server_result}->update($form->fif); + $c->stash->{server_result}->update($form->values); $self->_sip_lcr_reload; $c->flash(messages => [{type => 'success', text => 'Peering server successfully updated'}]); } catch (DBIx::Class::Exception $e) { + $c->log->info("failed to update peering server: $e"); $c->flash(messages => [{type => 'error', text => 'Failed to update peering server'}]); - $c->log->info("Update failed: " . $e); }; - - $c->response->redirect($c->stash->{sr_list_uri}); - return; + NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for_action('/peering/servers_root', [$c->req->captures->[0]])); } - $c->stash(close_target => $c->stash->{sr_list_uri}); - $c->stash(servers_form => $form); - $c->stash(servers_edit_flag => 1); + $c->stash( + close_target => $c->uri_for_action('/peering/servers_root', [$c->req->captures->[0]]), + servers_form => $form, + servers_edit_flag => 1 + ); } sub servers_delete :Chained('servers_base') :PathPart('delete') :Args(0) { @@ -264,10 +273,10 @@ sub servers_delete :Chained('servers_base') :PathPart('delete') :Args(0) { $self->_sip_lcr_reload; $c->flash(messages => [{type => 'success', text => 'Peering server successfully deleted'}]); } catch (DBIx::Class::Exception $e) { + $c->log->error("failed to delete peering server: $e"); $c->flash(rules_messages => [{type => 'error', text => 'Failed to delete peering server'}]); - $c->log->info("Delete failed: " . $e); }; - $c->response->redirect($c->stash->{sr_list_uri}); + NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for_action('/peering/servers_root', [$c->req->captures->[0]])); } sub servers_preferences_list :Chained('servers_base') :PathPart('preferences') :CaptureArgs(0) { @@ -373,29 +382,36 @@ sub rules_ajax :Chained('rules_list') :PathPart('r_ajax') :Args(0) { sub rules_create :Chained('rules_list') :PathPart('create') :Args(0) { my ($self, $c) = @_; - + + my $posted = ($c->request->method eq 'POST'); my $form = NGCP::Panel::Form::PeeringRule->new; $form->process( - posted => ($c->request->method eq 'POST'), + posted => $posted, params => $c->request->params, - action => $c->uri_for_action('/peering/rules_create', [$c->req->captures->[0]]), ); - if($form->validated) { + NGCP::Panel::Utils::Navigation::check_form_buttons( + c => $c, + form => $form, + fields => {}, + back_uri => $c->req->uri + ); + if($posted && $form->validated) { try { - $c->stash->{group_result}->voip_peer_rules->create( $form->fif ); + $c->stash->{group_result}->voip_peer_rules->create($form->values); $self->_sip_lcr_reload; $c->flash(rules_messages => [{type => 'success', text => 'Peering rule successfully created'}]); } catch (DBIx::Class::Exception $e) { + $c->log->error("failed to create peering rule: $e"); $c->flash(rules_messages => [{type => 'error', text => 'Failed to create peering rule'}]); - $c->log->info("Create failed: " . $e); }; - $c->response->redirect($c->stash->{sr_list_uri}); - return; + NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for_action('/peering/servers_root', [$c->req->captures->[0]])); } - $c->stash(close_target => $c->stash->{sr_list_uri}); - $c->stash(rules_create_flag => 1); - $c->stash(rules_form => $form); + $c->stash( + close_target => $c->uri_for_action('/peering/servers_root', [$c->req->captures->[0]]), + rules_create_flag => 1, + rules_form => $form, + ); } sub rules_base :Chained('rules_list') :PathPart('') :CaptureArgs(1) { @@ -425,26 +441,33 @@ sub rules_edit :Chained('rules_base') :PathPart('edit') :Args(0) { my $posted = ($c->request->method eq 'POST'); my $form = NGCP::Panel::Form::PeeringRule->new; $form->process( - posted => 1, - params => $posted ? $c->request->params : $c->stash->{rule}, - action => $c->uri_for_action('/peering/rules_edit', $c->req->captures) + posted => $posted, + params => $c->request->params, + item => $c->stash->{rule}, + ); + NGCP::Panel::Utils::Navigation::check_form_buttons( + c => $c, + form => $form, + fields => {}, + back_uri => $c->req->uri ); if($posted && $form->validated) { try { - $c->stash->{rule_result}->update($form->fif); + $c->stash->{rule_result}->update($form->values); $self->_sip_lcr_reload; $c->flash(rules_messages => [{type => 'success', text => 'Peering rule successfully changed'}]); } catch (DBIx::Class::Exception $e) { + $c->log->error("failed to update peering rule: $e"); $c->flash(rules_messages => [{type => 'error', text => 'Failed to update peering rule'}]); - $c->log->info("Update failed: " . $e); }; - $c->response->redirect($c->stash->{sr_list_uri}); - return; + NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for_action('/peering/servers_root', [$c->req->captures->[0]])); } - $c->stash(close_target => $c->stash->{sr_list_uri}); - $c->stash(rules_form => $form); - $c->stash(rules_edit_flag => 1); + $c->stash( + close_target => $c->uri_for_action('/peering/servers_root', [$c->req->captures->[0]]), + rules_form => $form, + rules_edit_flag => 1, + ); } sub rules_delete :Chained('rules_base') :PathPart('delete') :Args(0) { @@ -455,10 +478,10 @@ sub rules_delete :Chained('rules_base') :PathPart('delete') :Args(0) { $self->_sip_lcr_reload; $c->flash(rules_messages => [{type => 'success', text => 'Peering rule successfully deleted'}]); } catch (DBIx::Class::Exception $e) { + $c->log->info("failed to delete peering rule: $e"); $c->flash(rules_messages => [{type => 'error', text => 'Failed to delete peering rule'}]); - $c->log->info("Delete failed: " . $e); }; - $c->response->redirect($c->stash->{sr_list_uri}); + NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for_action('/peering/servers_root', [$c->req->captures->[0]])); } sub _sip_lcr_reload { diff --git a/lib/NGCP/Panel/Controller/Reseller.pm b/lib/NGCP/Panel/Controller/Reseller.pm index 883cde0136..3e7175ae3b 100644 --- a/lib/NGCP/Panel/Controller/Reseller.pm +++ b/lib/NGCP/Panel/Controller/Reseller.pm @@ -212,7 +212,20 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) { try { $form->params->{contract_id} = delete $form->params->{contract}{id}; delete $form->params->{contract}; - $c->stash->{reseller}->first->update($form->params); + $c->stash->{reseller}->first->update($form->params); + + # if a reseller is terminated, we need to terminate all customers + # and subscribers + if($c->stash->{reseller}->first->status eq "terminated") { + for my $customer($c->stash->{reseller}->first->contracts->all) { + $customer->update({ status => 'terminated' }); + for my $subscriber($customer->voip_subscribers->all) { + $subscriber->update({ status => 'terminated' }); + $subscriber->provisioning_voip_subscriber->delete; + } + } + } + delete $c->session->{created_objects}->{contract}; delete $c->session->{edit_contract_id}; $c->flash(messages => [{type => 'success', text => 'Reseller successfully updated'}]); @@ -230,22 +243,6 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) { return; } -sub delete :Chained('base') :PathPart('delete') :Args(0) { - my ($self, $c) = @_; - - $c->detach('/denied_page') - if($c->user->read_only); - - try { - $c->stash->{reseller}->first->delete; - $c->flash(messages => [{type => 'success', text => 'Reseller successfully deleted'}]); - } catch($e) { - $c->log->error($e); - $c->flash(messages => [{type => 'error', text => 'Failed to delete reseller'}]); - } - $c->response->redirect($c->uri_for()); -} - sub details :Chained('base') :PathPart('details') :Args(0) { my ($self, $c) = @_; $c->stash(template => 'reseller/details.tt'); diff --git a/lib/NGCP/Panel/Form/PeeringServer.pm b/lib/NGCP/Panel/Form/PeeringServer.pm index ba56f4fbdc..6443deaf5b 100644 --- a/lib/NGCP/Panel/Form/PeeringServer.pm +++ b/lib/NGCP/Panel/Form/PeeringServer.pm @@ -32,6 +32,7 @@ has_field 'port' => ( type => 'PosInteger', max_range => 65535, default => '5060', + required => 1, ); has_field 'transport' => ( @@ -46,7 +47,9 @@ has_field 'transport' => ( has_field 'weight' => ( type => 'PosInteger', + required => 1, max_range => 25, + default => 1, ); has_field 'save' => (