Handle allowed_ips preference.

Write data to voip_allowed_ip_groups. Use voip_aig_sequence as counter.
Also move the Preference handling to Utils/Preferences.pm
agranig/peering-route
Gerhard Jungwirth 12 years ago committed by Andreas Granig
parent c4d26d1871
commit c33021d30e

@ -8,6 +8,7 @@ use NGCP::Panel::Form::Domain::Reseller;
use NGCP::Panel::Form::Domain::Admin;
use NGCP::Panel::Utils::Navigation;
use NGCP::Panel::Utils::Prosody;
use NGCP::Panel::Utils::Preferences;
sub auto :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) :AllowedRole(reseller) {
my ($self, $c) = @_;
@ -246,7 +247,7 @@ sub preferences_edit :Chained('preferences_base') :PathPart('edit') :Args(0) {
domain_id => $c->stash->{provisioning_domain_result}->id,
});
NGCP::Panel::Utils::create_preference_form( c => $c,
NGCP::Panel::Utils::Preferences::create_preference_form( c => $c,
pref_rs => $pref_rs,
enums => \@enums,
base_uri => $c->uri_for_action('/domain/preferences', [$c->req->captures->[0]]),
@ -288,7 +289,7 @@ sub load_preference_list :Private {
$c->stash(sound_sets_rs => $sound_sets_rs,
sound_sets => [$sound_sets_rs->all]);
NGCP::Panel::Utils::load_preference_list( c => $c,
NGCP::Panel::Utils::Preferences::load_preference_list( c => $c,
pref_values => \%pref_values,
dom_pref => 1,
);

@ -10,6 +10,7 @@ use NGCP::Panel::Form::PeeringRule;
use NGCP::Panel::Form::PeeringServer;
use NGCP::Panel::Utils::XMLDispatcher;
use NGCP::Panel::Utils::Navigation;
use NGCP::Panel::Utils::Preferences;
sub auto :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) {
my ($self, $c) = @_;
@ -318,7 +319,7 @@ sub servers_preferences_list :Chained('servers_base') :PathPart('preferences') :
$c->stash(rwr_sets_rs => $rewrite_rule_sets_rs,
rwr_sets => [$rewrite_rule_sets_rs->all]);
NGCP::Panel::Utils::load_preference_list( c => $c,
NGCP::Panel::Utils::Preferences::load_preference_list( c => $c,
pref_values => \%pref_values,
peer_pref => 1,
);
@ -366,7 +367,7 @@ sub servers_preferences_edit :Chained('servers_preferences_base') :PathPart('edi
my $pref_rs = $c->stash->{server_result}->voip_peer_preferences;
NGCP::Panel::Utils::create_preference_form( c => $c,
NGCP::Panel::Utils::Preferences::create_preference_form( c => $c,
pref_rs => $pref_rs,
enums => \@enums,
base_uri => $c->uri_for_action('/peering/servers_preferences_root', [@{ $c->req->captures }[0,1]]),
@ -609,7 +610,7 @@ id to stash. Will be used by L</servers_preferences_edit>.
=head2 servers_preferences_edit
Show a modal to edit one preference. Mainly uses
NGCP::Panel::Utils::create_preference_form.
NGCP::Panel::Utils::Preferences::create_preference_form.
=head2 rules_list

@ -2,12 +2,12 @@ package NGCP::Panel::Controller::Subscriber;
use Sipwise::Base;
BEGIN { extends 'Catalyst::Controller'; }
use HTML::Entities;
use NGCP::Panel::Utils;
use NGCP::Panel::Utils::Navigation;
use NGCP::Panel::Utils::Contract;
use NGCP::Panel::Utils::Subscriber;
use NGCP::Panel::Utils::Datatables;
use NGCP::Panel::Utils::Callflow;
use NGCP::Panel::Utils::Preferences;
use NGCP::Panel::Form::Subscriber;
use NGCP::Panel::Form::SubscriberEdit;
use NGCP::Panel::Form::SubscriberCFSimple;
@ -353,7 +353,7 @@ sub preferences_edit :Chained('preferences_base') :PathPart('edit') :Args(0) {
subscriber_id => $c->stash->{subscriber}->provisioning_voip_subscriber->id
});
NGCP::Panel::Utils::create_preference_form( c => $c,
NGCP::Panel::Utils::Preferences::create_preference_form( c => $c,
pref_rs => $pref_rs,
enums => \@enums,
base_uri => $c->uri_for_action('/subscriber/preferences', [$c->req->captures->[0]]),
@ -1360,7 +1360,7 @@ sub load_preference_list :Private {
$c->stash(sound_sets_rs => $sound_sets_rs,
sound_sets => [$sound_sets_rs->all]);
NGCP::Panel::Utils::load_preference_list( c => $c,
NGCP::Panel::Utils::Preferences::load_preference_list( c => $c,
pref_values => \%pref_values,
usr_pref => 1,
);

@ -1,4 +1,4 @@
package NGCP::Panel::Utils;
package NGCP::Panel::Utils::Preferences;
use strict;
use warnings;
@ -53,6 +53,11 @@ sub load_preference_list {
->find($pref_values->{adm_ncos_id})->id
: undef;
}
elsif($pref->attribute eq "allowed_ips") {
$pref->{allowed_ips_group_id} = $pref_values->{allowed_ips_grp};
$pref->{allowed_ips_rs} = $c->model('DB')->resultset('voip_allowed_ip_groups')
->search_rs({ group_id => $pref_values->{allowed_ips_grp} });
}
if($pref->data_type eq "enum") {
$pref->{enums} = [];
push @{ $pref->{enums} },
@ -83,6 +88,9 @@ sub create_preference_form {
my $base_uri = $params{base_uri};
my $edit_uri = $params{edit_uri};
my $enums = $params{enums};
my $aip_grp_rs;
my $aip_group_id;
my $preselected_value = undef;
if ($c->stash->{preference_meta}->attribute eq "rewrite_rule_set") {
@ -114,6 +122,17 @@ sub create_preference_form {
if (defined $ncos_id_preference) {
$preselected_value = $ncos_id_preference->value;
}
} elsif ($c->stash->{preference_meta}->attribute eq "allowed_ips") {
my $allowed_ips_grp = $pref_rs->search({
'attribute.attribute' => 'allowed_ips_grp'
},{
join => 'attribute'
})->first;
if (defined $allowed_ips_grp) {
$aip_group_id = $allowed_ips_grp->value;
$aip_grp_rs = $c->model('DB')->resultset('voip_allowed_ip_groups')
->search({ group_id => $aip_group_id });
}
} elsif ($c->stash->{preference_meta}->max_occur == 1) {
$preselected_value = $c->stash->{preference_values}->[0];
}
@ -144,7 +163,32 @@ sub create_preference_form {
if($posted && $form->validated) {
my $preference_id = $c->stash->{preference}->first ? $c->stash->{preference}->first->id : undef;
my $attribute = $c->stash->{preference_meta}->attribute;
if ($c->stash->{preference_meta}->max_occur != 1) {
if ($attribute eq "allowed_ips") {
unless (defined $aip_group_id) {
#TODO put this in a transaction
my $new_group = $c->model('DB')->resultset('voip_aig_sequence')
->create({});
my $aig_preference_id = $c->model('DB')
->resultset('voip_preferences')
->find({ attribute => 'allowed_ips_grp' })
->id;
$pref_rs->create({
value => $new_group->id,
attribute_id => $aig_preference_id,
});
$aip_group_id = $new_group->id;
$aip_grp_rs = $c->model('DB')->resultset('voip_allowed_ip_groups')
->search({ group_id => $aip_group_id });
$c->model('DB')->resultset('voip_aig_sequence')->search_rs({
id => { '<' => $new_group->id },
})->delete_all;
}
$aip_grp_rs->create({
group_id => $aip_group_id,
ipnet => $form->field($attribute)->value,
});
} elsif ($c->stash->{preference_meta}->max_occur != 1) {
$pref_rs->create({
attribute_id => $c->stash->{preference_meta}->id,
value => $form->field($c->stash->{preference_meta}->attribute)->value,
@ -239,9 +283,27 @@ sub create_preference_form {
$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);
}
}
}
$form->process if $posted;
$c->stash(form => $form);
$c->stash(form => $form,
aip_grp_rs => $aip_grp_rs);
}
sub _set_rewrite_preferences {
@ -275,11 +337,12 @@ sub _set_rewrite_preferences {
=head1 NAME
NGCP::Panel::Utils
NGCP::Panel::Utils::Preferences
=head1 DESCRIPTION
Various utils to outsource common tasks in the controllers.
Various utils to outsource common tasks in the controllers
regarding voip_preferences.
=head1 METHODS
@ -343,6 +406,11 @@ be set.
The preference with the attribute sound_set will contain the id of a sound_set.
=head3 Special case allowed_ips
Also something special here. The table containing data is
provisioning.voip_allowed_ip_groups.
=head2 _set_rewrite_preferences
See "Special case rewrite_rule_set".

@ -13,6 +13,7 @@
helper.rewrite_rule_sets = rwr_sets;
helper.ncos_levels = ncos_levels;
helper.sound_sets = sound_sets;
helper.aip_grp_rs = aip_grp_rs;
helper.top_buttons = [
{ name = 'Back', uri = c.uri_for(), icon = 'icon-arrow-left' },

@ -85,6 +85,10 @@
<option [% (r.value.defined && r.value == set.id) ? 'selected="selected"' : '' %]>[% set.name %]</option>
[% END -%]
</select>
[% ELSIF r.attribute == "allowed_ips" -%]
[% FOR ipnet IN r.allowed_ips_rs.all -%]
[% ipnet.ipnet -%]<br/>
[% END -%]
[% ELSIF r.data_type == "boolean" %]
<input type="checkbox" disabled="disabled"
@ -133,7 +137,20 @@
m.name = "Preference " _ helper.preference_meta.attribute);
-%]
[% IF helper.preference_meta.max_occur != 1 %]
[% IF helper.preference_meta.attribute == "allowed_ips" %]
<div class="modal-body">
[% FOREACH net IN helper.aip_grp_rs.all %]
<div class="row-fluid">
<input type="text" value="[% net.ipnet %]" disabled="disabled"></input>
<a class="btn btn-primary pull-right" href="?delete_aig=[% net.id %]"><i class="icon-trash"></i></a>
</div>
[% END %]
<form action="[% helper.form.action %]" method="post">
[% helper.form.field(helper.preference_meta.attribute).render %]
<span class="pull-right">[% helper.form.field("add").render %]</span>
</form>
</div>
[% ELSIF helper.preference_meta.max_occur != 1 %]
<div class="modal-body">
[% FOREACH v IN helper.preference.all %]
<div class="row-fluid">

@ -11,6 +11,7 @@
helper.base_uri = c.uri_for_action("/peering/servers_preferences_root",
[c.req.captures.0, c.req.captures.1]);
helper.rewrite_rule_sets = rwr_sets;
helper.aip_grp_rs = aip_grp_rs;
helper.dt_buttons = [
{ name = 'Edit', uri = c.uri_for_action("/peering/servers_preferences_root", [c.req.captures.0, c.req.captures.1]), class = 'btn-small btn-primary', icon = 'icon-edit' },

@ -13,6 +13,7 @@
helper.rewrite_rule_sets = rwr_sets;
helper.ncos_levels = ncos_levels;
helper.sound_sets = sound_sets;
helper.aip_grp_rs = aip_grp_rs;
helper.skip_head = 1;
%]

Loading…
Cancel
Save