MT#21543 Implement emergency mapping preference

Let new emergency mapping containers be assigned to subscribers,
customers, domains.

Change-Id: Ifef5234731604e8ee7373ef2f8d83f1e53431624
changes/32/7332/2
Andreas Granig 10 years ago
parent ab7a7534c0
commit c6e03b7ded

@ -2217,6 +2217,12 @@ sub load_preference_list :Private {
$c->stash(ncos_levels_rs => $ncos_levels_rs,
ncos_levels => [$ncos_levels_rs->all]);
my $emergency_mapping_containers_rs = $c->model('DB')
->resultset('emergency_containers')
->search_rs({ reseller_id => $reseller_id, });
$c->stash(emergency_mapping_containers_rs => $emergency_mapping_containers_rs,
emergency_mapping_containers => [$emergency_mapping_containers_rs->all]);
NGCP::Panel::Utils::Preferences::load_preference_list( c => $c,
pref_values => \%pref_values,
contract_pref => 1,

@ -383,6 +383,12 @@ sub load_preference_list :Private {
$c->stash(ncos_levels_rs => $ncos_levels_rs,
ncos_levels => [$ncos_levels_rs->all]);
my $emergency_mapping_containers_rs = $c->model('DB')
->resultset('emergency_containers')
->search_rs({ reseller_id => $correct_reseller_id, });
$c->stash(emergency_mapping_containers_rs => $emergency_mapping_containers_rs,
emergency_mapping_containers => [$emergency_mapping_containers_rs->all]);
my $sound_sets_rs = $c->model('DB')
->resultset('voip_sound_sets')
->search_rs({ reseller_id => $correct_reseller_id, contract_id => undef, });

@ -2055,6 +2055,11 @@ sub load_preference_list :Private {
$c->stash(ncos_levels_rs => $ncos_levels_rs,
ncos_levels => [$ncos_levels_rs->all]);
my $emergency_mapping_containers_rs = $c->model('DB')
->resultset('emergency_containers')->search({ reseller_id => $reseller_id });
$c->stash(emergency_mapping_containers_rs => $emergency_mapping_containers_rs,
emergency_mapping_containers => [$emergency_mapping_containers_rs->all]);
my $sound_sets_rs = $c->model('DB')
->resultset('voip_sound_sets')->search({
reseller_id => $reseller_id,

@ -36,6 +36,7 @@ sub field_list {
my $enums = $row->{enums};
my $rwrs_rs = $row->{rwrs_rs};
my $ncos_rs = $row->{ncos_rs};
my $emergency_mapping_containers_rs = $row->{emergency_mapping_containers_rs};
my $sound_rs = $row->{sound_rs};
my $contract_sound_rs = $row->{contract_sound_rs};
my $field;
@ -59,6 +60,15 @@ sub field_list {
type => 'Select',
options => \@options,
};
} elsif ($meta->attribute eq "emergency_mapping_container") {
my @options = map {{label => $_->name, value => $_->id}}
defined $emergency_mapping_containers_rs ? $emergency_mapping_containers_rs->all : ();
unshift @options, {label => '', value => ''};
$field = {
name => $meta->attribute,
type => 'Select',
options => \@options,
};
} elsif ($meta->attribute eq "sound_set") {
my @options = map {{label => $_->name, value => $_->id}}
defined $sound_rs ? $sound_rs->all : ();

@ -131,6 +131,25 @@ sub get_resource {
$processed = 1;
last SWITCH;
};
/^emergency_mapping_container_id$/ && do {
my $pref_name = $pref->attribute->attribute;
$pref_name =~ s/_id$//;
do { $processed = 1; last SWITCH; }
if($attr && !$self->_check_profile($c, $pref_name, \%profile_attrs));
my $container = $c->model('DB')->resultset('emergency_containers')->find({
id => $pref->value,
});
if($container) {
$resource->{$pref_name} = $container->name;
} else {
$c->log->error("no emergency mapping container for '".$pref->attribute->attribute."' with value '".$pref->value."' found, altough it's stored in preference id ".$pref->id);
# let it slip through
}
$processed = 1;
last SWITCH;
};
/^(contract_)?sound_set$/ && do {
# TODO: not applicable for domains, but for subs, check for contract_id!
do { $processed = 1; last SWITCH; }
@ -417,6 +436,7 @@ sub update_item {
rewrite_callee_in_dpid rewrite_callee_out_dpid
rewrite_caller_lnp_dpid rewrite_callee_lnp_dpid
ncos_id adm_ncos_id adm_cf_ncos_id
emergency_mapping_container_id
sound_set contract_sound_set
allowed_ips_grp man_allowed_ips_grp
/];
@ -465,6 +485,14 @@ sub update_item {
}
last SWITCH;
};
/^emergency_mapping_container$/ && do {
unless(exists $resource->{$k}) {
my $rs = $self->get_preference_rs($c, $type, $elem, $k . '_id');
last SWITCH unless $rs; # unknown resource, just ignore
$rs->delete;
}
last SWITCH;
};
/^(man_)?allowed_ips$/ && do {
unless(exists $resource->{$k}) {
my $rs = $self->get_preference_rs($c, $type, $elem, $k . '_grp');
@ -576,6 +604,25 @@ sub update_item {
}
last SWITCH;
};
/^emergency_mapping_container$/ && do {
my $pref_name = $pref . "_id";
my $container = $c->model('DB')->resultset('emergency_containers')->find({
name => $resource->{$pref},
reseller_id => $reseller_id,
});
unless($container) {
$c->log->error("no emergency mapping container '".$resource->{$pref}."' for reseller id $reseller_id found");
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Unknown emergency mapping container '".$resource->{$pref}."'");
return;
}
my $rs = $self->get_preference_rs($c, $type, $elem, $pref_name);
if($rs->first) {
$rs->first->update({ value => $container->id });
} else {
$rs->create({ value => $container->id });
}
last SWITCH;
};
/^(contract_)?sound_set$/ && do {
# TODO: not applicable for domains, but for subs, check for contract_id!
my $set = $c->model('DB')->resultset('voip_sound_sets')->find({

@ -119,6 +119,13 @@ sub load_preference_list {
$pref->{adm_cf_ncos_id} = $tmp->id;
}
}
elsif($pref->attribute eq "emergency_mapping_container") {
if ($pref_values->{emergency_mapping_container_id} &&
(my $tmp = $c->stash->{emergency_mapping_containers_rs}
->find($pref_values->{emergency_mapping_container_id}) )) {
$pref->{emergency_mapping_container_id} = $tmp->id;
}
}
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')
@ -241,6 +248,15 @@ sub create_preference_form {
if (defined $ncos_id_preference) {
$preselected_value = $ncos_id_preference->value;
}
} elsif ($c->stash->{preference_meta}->attribute eq "emergency_mapping_container") {
my $container_id_preference = $pref_rs->search({
'attribute.attribute' => 'emergency_mapping_container_id'
},{
join => 'attribute'
})->first;
if (defined $container_id_preference) {
$preselected_value = $container_id_preference->value;
}
} elsif ($c->stash->{preference_meta}->attribute eq "allowed_ips") {
my $allowed_ips_grp = $pref_rs->search({
'attribute.attribute' => 'allowed_ips_grp'
@ -308,6 +324,7 @@ sub create_preference_form {
enums => $enums,
rwrs_rs => $c->stash->{rwr_sets_rs},
ncos_rs => $c->stash->{ncos_levels_rs},
emergency_mapping_containers_rs => $c->stash->{emergency_mapping_containers_rs},
sound_rs => $c->stash->{sound_sets_rs},
contract_sound_rs => $c->stash->{contract_sound_sets_rs},
}],
@ -578,6 +595,39 @@ sub create_preference_form {
}
$c->response->redirect($base_uri);
return 1;
} elsif ($attribute eq "emergency_mapping_container") {
my $selected_container = $c->stash->{emergency_mapping_containers_rs}->find(
$form->field($attribute)->value
);
my $attribute_id = $c->model('DB')->resultset('voip_preferences')
->find({attribute => $attribute."_id"})->id;
try {
my $preference = $pref_rs->search({ attribute_id => $attribute_id });
if(!defined $selected_container) {
$preference->first->delete if $preference->first;
} elsif($preference->first) {
$preference->first->update({ value => $selected_container->id });
} else {
$preference->create({ value => $selected_container->id });
}
NGCP::Panel::Utils::Message::info(
c => $c,
data => \%log_data,
desc => $c->loc('Preference [_1] successfully updated', $attribute),
);
} catch($e) {
NGCP::Panel::Utils::Message::error(
c => $c,
error => $e,
data => \%log_data,
desc => $c->loc('Failed to update preference [_1]', $attribute),
);
$c->response->redirect($base_uri);
return 1;
}
$c->response->redirect($base_uri);
return 1;
} elsif ($attribute eq "sound_set") {
my $selected_set = $c->stash->{sound_sets_rs}->find(
$form->field($attribute)->value
@ -1024,7 +1074,7 @@ sub api_preferences_defs{
push @{ $fields->{enum_values} }, $efields;
}
}
if ($pref->attribute =~ m/^(rewrite_rule_set|ncos|adm_ncos|adm_cf_ncos|sound_set|contract_sound_set)$/) {
if ($pref->attribute =~ m/^(rewrite_rule_set|ncos|adm_ncos|adm_cf_ncos|emergency_mapping_container|sound_set|contract_sound_set)$/) {
$fields->{data_type} = 'string';
}
$resource->{$pref->attribute} = $fields;
@ -1097,6 +1147,14 @@ be set.
The updated preferences are called ncos_id and adm_ncos_id.
=head3 Special case emergency_mapping_container
Very similar to ncos (see above). The stashed variables are
emergency_mapping_containers_rs and emergency_mapping_containers. In the template
helper.ncos_levels needs to be set.
The updated preferences are called ncos_id and adm_ncos_id.
=head3 Special case sound_set and contract_sound_set
This is also similar to rewrite_rule_set and ncos. The stashed variables are

@ -23,6 +23,7 @@
helper.base_uri = c.uri_for(contract.id,'preferences');
END;
helper.ncos_levels = ncos_levels;
helper.emergency_mapping_containers = emergency_mapping_containers;
helper.location_id = location_id;
helper.top_buttons = [

@ -14,6 +14,7 @@
helper.base_uri = c.uri_for(domain.id,'preferences');
helper.rewrite_rule_sets = rwr_sets;
helper.ncos_levels = ncos_levels;
helper.emergency_mapping_containers = emergency_mapping_containers;
helper.sound_sets = sound_sets;
helper.man_aip_grp_rs = man_aip_grp_rs;

@ -91,6 +91,13 @@
<option [% (r.adm_cf_ncos_id.defined && r.adm_cf_ncos_id == level.id) ? 'selected="selected"' : '' %]>[% level.level %]</option>
[% END -%]
</select>
[% ELSIF r.attribute == "emergency_mapping_container" -%]
<select disabled="disabled">
<option>&nbsp;</option>
[% FOR container IN helper.emergency_mapping_containers -%]
<option [% (r.emergency_mapping_container_id.defined && r.emergency_mapping_container_id == container.id) ? 'selected="selected"' : '' %]>[% container.name %]</option>
[% END -%]
</select>
[% ELSIF r.attribute == "sound_set" -%]
<select disabled="disabled">
<option>&nbsp;</option>
@ -161,7 +168,7 @@
PROCESS "helpers/modal.tt";
modal_header(m.create_flag=0,
m.name = c.loc("Preference '") _ c.loc(helper.preference_meta.label) _"'");
IF ! helper.preference_meta.attribute.match('(ncos|sound_set)$');
IF ! helper.preference_meta.attribute.match('(ncos|sound_set|emergency_mapping_container)$');
helper.form = translate_form(helper.form);
END;
-%]

@ -19,6 +19,7 @@
helper.base_uri = c.uri_for(subscriber.id,'preferences');
helper.rewrite_rule_sets = rwr_sets;
helper.ncos_levels = ncos_levels;
helper.emergency_mapping_containers = emergency_mapping_containers;
helper.sound_sets = sound_sets;
helper.contract_sound_sets = contract_sound_sets;
helper.aip_grp_rs = aip_grp_rs;

Loading…
Cancel
Save