From cf519fb44b44c2a7232def73fe2008ed8aac7298 Mon Sep 17 00:00:00 2001 From: Andreas Granig Date: Mon, 4 Aug 2014 14:04:45 +0200 Subject: [PATCH] MT#8279 Inflate/deflate block list input in CSC --- lib/NGCP/Panel/Controller/Subscriber.pm | 2 - lib/NGCP/Panel/Utils/Preferences.pm | 178 ++++++++++++++-------- share/templates/customer/preferences.tt | 1 + share/templates/domain/preferences.tt | 1 + share/templates/helpers/pref_table.tt | 7 +- share/templates/peering/preferences.tt | 1 + share/templates/subscriber/preferences.tt | 1 + 7 files changed, 127 insertions(+), 64 deletions(-) diff --git a/lib/NGCP/Panel/Controller/Subscriber.pm b/lib/NGCP/Panel/Controller/Subscriber.pm index 95ef13d988..12759601f3 100644 --- a/lib/NGCP/Panel/Controller/Subscriber.pm +++ b/lib/NGCP/Panel/Controller/Subscriber.pm @@ -761,8 +761,6 @@ sub preferences_base :Chained('base') :PathPart('preferences') :CaptureArgs(1) { attribute_id => $pref_id, subscriber_id => $c->stash->{subscriber}->provisioning_voip_subscriber->id }); - my @values = $c->stash->{preference}->get_column("value")->all; - $c->stash->{preference_values} = \@values; $c->stash(template => 'subscriber/preferences.tt'); } diff --git a/lib/NGCP/Panel/Utils/Preferences.pm b/lib/NGCP/Panel/Utils/Preferences.pm index 3e69db98fe..bb7200963a 100644 --- a/lib/NGCP/Panel/Utils/Preferences.pm +++ b/lib/NGCP/Panel/Utils/Preferences.pm @@ -65,6 +65,13 @@ sub load_preference_list { my @group_prefs = $group->voip_preferences->all; foreach my $pref(@group_prefs) { + my @values = @{ + exists $pref_values->{$pref->attribute} + ? $pref_values->{$pref->attribute} + : [] + }; + next unless(scalar @values); + if($pref->attribute eq "rewrite_rule_set") { my $tmp; $pref->{rwrs_id} = $pref_values->{rewrite_caller_in_dpid} && @@ -98,17 +105,28 @@ sub load_preference_list { $pref->{man_allowed_ips_rs} = $c->model('DB')->resultset('voip_allowed_ip_groups') ->search_rs({ group_id => $pref_values->{man_allowed_ips_grp} }); } + elsif($c->stash->{subscriber} && + ($pref->attribute eq "block_in_list" || $pref->attribute eq "block_out_list")) { + foreach my $v(@values) { + my $prefix = ""; + if($v =~ /^\#/) { + $v =~ s/^\#//; + $prefix = "#"; + } + + if($c->user->roles eq "subscriberadmin" || $c->user->roles eq "subscriber") { + $v = NGCP::Panel::Utils::Subscriber::apply_rewrite( + c => $c, subscriber => $c->stash->{subscriber}, number => $v, direction => 'caller_out' + ); + } + $v = $prefix . $v; + } + } if($pref->data_type eq "enum") { $pref->{enums} = []; push @{ $pref->{enums} }, $pref->voip_preferences_enums->all; } - my @values = @{ - exists $pref_values->{$pref->attribute} - ? $pref_values->{$pref->attribute} - : [] - }; - next unless(scalar @values); if($pref->max_occur != 1) { $pref->{value} = \@values; } else { @@ -134,6 +152,64 @@ sub create_preference_form { my $man_aip_grp_rs; my $man_aip_group_id; + my $delete_param = $c->request->params->{delete}; + my $deactivate_param = $c->request->params->{deactivate}; + my $activate_param = $c->request->params->{activate}; + my $param_id = $delete_param || $deactivate_param || $activate_param; + # only one parameter is processed at a time (?) + if($param_id) { + my $rs = $pref_rs->find($param_id); + if($rs) { + if($rs->attribute_id != $c->stash->{preference_meta}->id) { + # Invalid param (dom_pref does not belong to current pref) + } elsif($delete_param) { + $rs->delete(); + } elsif ($deactivate_param) { + $rs->update({value => "#".$rs->value}); + } elsif ($activate_param) { + my $new_value = $rs->value; + $new_value =~ s/^#//; + $rs->update({value => $new_value}); + } + } + } + my $delete_aig_param = $c->request->params->{delete_aig}; + if($delete_aig_param) { + my $result = $aip_grp_rs->find($delete_aig_param); + if($result) { + $result->delete; + unless ($aip_grp_rs->first) { #its empty + my $allowed_ips_grp_preference = $pref_rs->search({ + 'attribute.attribute' => 'allowed_ips_grp' + },{ + join => 'attribute' + })->first; + $allowed_ips_grp_preference->delete + if (defined $allowed_ips_grp_preference); + } + } + } + my $delete_man_aig_param = $c->request->params->{delete_man_aig}; + if($delete_man_aig_param) { + my $result = $man_aip_grp_rs->find($delete_man_aig_param); + if($result) { + $result->delete; + unless ($man_aip_grp_rs->first) { #its empty + my $man_allowed_ips_grp_preference = $pref_rs->search({ + 'attribute.attribute' => 'man_allowed_ips_grp' + },{ + join => 'attribute' + })->first; + $man_allowed_ips_grp_preference->delete + if (defined $man_allowed_ips_grp_preference); + } + } + } + + $c->stash->{preference_values} = [ + $c->stash->{preference}->get_column("value")->all + ]; + my $preselected_value = undef; if ($c->stash->{preference_meta}->attribute eq "rewrite_rule_set") { my $rewrite_caller_in_dpid = $pref_rs->search({ @@ -188,6 +264,16 @@ sub create_preference_form { $man_aip_grp_rs = $c->model('DB')->resultset('voip_allowed_ip_groups') ->search({ group_id => $man_aip_group_id }); } + } elsif($c->stash->{subscriber} && + ($c->stash->{preference_meta}->attribute eq "block_in_list" || $c->stash->{preference_meta}->attribute eq "block_out_list")) { + foreach my $v(@{ $c->stash->{preference_values} }) { + $v =~ s/^\#//; + if($c->user->roles eq "subscriberadmin" || $c->user->roles eq "subscriber") { + $v = NGCP::Panel::Utils::Subscriber::apply_rewrite( + c => $c, subscriber => $c->stash->{subscriber}, number => $v, direction => 'caller_out' + ); + } + } } elsif ($c->stash->{preference_meta}->max_occur == 1) { $preselected_value = $c->stash->{preference_values}->[0]; } @@ -303,14 +389,38 @@ sub create_preference_form { return 1; } } elsif ($c->stash->{preference_meta}->max_occur != 1) { + if($c->stash->{subscriber} && + ($c->stash->{preference_meta}->attribute eq "block_in_list" || $c->stash->{preference_meta}->attribute eq "block_out_list")) { + my $v = $form->params->{$c->stash->{preference_meta}->attribute}; + + if($c->user->roles eq "subscriberadmin" || $c->user->roles eq "subscriber") { + $v =~ s/^(.+?)([*\[].*$)/$1/; # strip any trailing shell pattern stuff + my $suffix = $2 // ""; + $form->params->{$c->stash->{preference_meta}->attribute} = NGCP::Panel::Utils::Subscriber::apply_rewrite( + c => $c, subscriber => $c->stash->{subscriber}, number => $v, direction => 'callee_in' + ); + + # rewrite it back for immediate display + $v = $form->params->{$c->stash->{preference_meta}->attribute}; + $v = NGCP::Panel::Utils::Subscriber::apply_rewrite( + c => $c, subscriber => $c->stash->{subscriber}, number => $v, direction => 'caller_out' + ); + + # restore stripped shell pattern stuff + $form->params->{$c->stash->{preference_meta}->attribute} .= $suffix; + $v .= $suffix; + + } + push @{ $c->stash->{preference_values} }, $v; + } try { $pref_rs->create({ attribute_id => $c->stash->{preference_meta}->id, - value => $form->field($c->stash->{preference_meta}->attribute)->value, + value => $form->params->{$c->stash->{preference_meta}->attribute}, }); } catch($e) { $c->log->error("failed to create preference $attribute: $e"); - $c->flash(messages => [{type => 'error', text => $c->loc('Failed to delete preference [_1].', $attribute)}]); + $c->flash(messages => [{type => 'error', text => $c->loc('Failed to create preference [_1].', $attribute)}]); $c->response->redirect($base_uri); return 1; } @@ -450,58 +560,6 @@ sub create_preference_form { OUT: - my $delete_param = $c->request->params->{delete}; - my $deactivate_param = $c->request->params->{deactivate}; - my $activate_param = $c->request->params->{activate}; - my $param_id = $delete_param || $deactivate_param || $activate_param; - # only one parameter is processed at a time (?) - if($param_id) { - my $rs = $pref_rs->find($param_id); - if($rs->attribute_id != $c->stash->{preference_meta}->id) { - # Invalid param (dom_pref does not belong to current pref) - } elsif($delete_param) { - $rs->delete(); - } elsif ($deactivate_param) { - $rs->update({value => "#".$rs->value}); - } elsif ($activate_param) { - my $new_value = $rs->value; - $new_value =~ s/^#//; - $rs->update({value => $new_value}); - } - } - my $delete_aig_param = $c->request->params->{delete_aig}; - if($delete_aig_param) { - my $result = $aip_grp_rs->find($delete_aig_param); - if($result) { - $result->delete; - unless ($aip_grp_rs->first) { #its empty - my $allowed_ips_grp_preference = $pref_rs->search({ - 'attribute.attribute' => 'allowed_ips_grp' - },{ - join => 'attribute' - })->first; - $allowed_ips_grp_preference->delete - if (defined $allowed_ips_grp_preference); - } - } - } - my $delete_man_aig_param = $c->request->params->{delete_man_aig}; - if($delete_man_aig_param) { - my $result = $man_aip_grp_rs->find($delete_man_aig_param); - if($result) { - $result->delete; - unless ($man_aip_grp_rs->first) { #its empty - my $man_allowed_ips_grp_preference = $pref_rs->search({ - 'attribute.attribute' => 'man_allowed_ips_grp' - },{ - join => 'attribute' - })->first; - $man_allowed_ips_grp_preference->delete - if (defined $man_allowed_ips_grp_preference); - } - } - } - $form->process if ($posted && $form->validated); $c->stash(form => $form, aip_grp_rs => $aip_grp_rs, diff --git a/share/templates/customer/preferences.tt b/share/templates/customer/preferences.tt index 57e73b8f1b..44ffffd6f7 100644 --- a/share/templates/customer/preferences.tt +++ b/share/templates/customer/preferences.tt @@ -8,6 +8,7 @@ helper.edit_preference = edit_preference; helper.preference = preference; helper.preference_meta = preference_meta; + helper.preference_values = preference_values; helper.pref_groups = pref_groups; helper.form = form; helper.base_uri = c.uri_for(contract.id,'preferences'); diff --git a/share/templates/domain/preferences.tt b/share/templates/domain/preferences.tt index 7657a19b79..2f10678c34 100644 --- a/share/templates/domain/preferences.tt +++ b/share/templates/domain/preferences.tt @@ -8,6 +8,7 @@ helper.edit_preference = edit_preference; helper.preference = preference; helper.preference_meta = preference_meta; + helper.preference_values = preference_values; helper.pref_groups = pref_groups; helper.form = form; helper.base_uri = c.uri_for(domain.id,'preferences'); diff --git a/share/templates/helpers/pref_table.tt b/share/templates/helpers/pref_table.tt index fccd9c776e..524c988ca1 100644 --- a/share/templates/helpers/pref_table.tt +++ b/share/templates/helpers/pref_table.tt @@ -185,12 +185,14 @@ [% ELSIF helper.preference_meta.max_occur != 1 %]