Force E164 numbers

Force input of E164 numbers (patterns where applicable) of cli* and
*block_*_list preferences (will not change what is actually written
to the database)
3.4
Christian Veigl 14 years ago
parent ae346c82cb
commit 5eb001e57a

@ -795,10 +795,6 @@ sub preferences : Local {
\$rules
);
$c->stash->{rewrite_rule_sets} = $rules if eval { @$rules };
} elsif($$pref{preference} eq 'block_in_list' or $$pref{preference} eq 'block_out_list' or
$$pref{preference} eq 'adm_block_in_list' or $$pref{preference} eq 'adm_block_out_list')
{
eval { @{$$preferences{$$pref{preference}}} = map { s/^([1-9])/+$1/; $_ } @{$$preferences{$$pref{preference}}} };
}
elsif ($$pref{data_type} eq 'enum') {
@ -906,16 +902,21 @@ sub update_preferences : Local {
delete $$preferences{$$db_pref{preference}}, next
if $$db_pref{read_only};
if($$db_pref{preference} eq 'cli') {
$$preferences{cli} = $c->request->params->{cli} or undef;
if(defined $$preferences{cli} and $$preferences{cli} =~ /^\+?\d+$/) {
$$preferences{cli} = admin::Utils::get_qualified_number_for_subscriber($c, $$preferences{cli});
my $checkresult;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'check_E164_number', $$preferences{cli}, \$checkresult);
$messages{cli} = 'Client.Voip.MalformedNumber'
unless $checkresult;
for (qw/cli user_cli emergency_cli/) {
next unless defined $$preferences{$_};
if ($$db_pref{preference} eq $_) {
$$preferences{$_} = $c->request->params->{$_} or undef;
if(defined $$preferences{$_} and $$preferences{$_} ne '') {
my $checkresult;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'check_E164_number', $$preferences{$_}, \$checkresult);
$messages{$_} = 'Client.Syntax.InvalidE164Number'
unless $checkresult;
}
}
} elsif($$db_pref{preference} eq 'cc') {
}
if($$db_pref{preference} eq 'cc') {
$$preferences{$$db_pref{preference}} = $c->request->params->{$$db_pref{preference}} || undef;
if(defined $$preferences{$$db_pref{preference}}) {
my $checkresult;
@ -2459,7 +2460,6 @@ sub edit_list : Local {
my @block_list_to_sort;
foreach my $blockentry (@$block_list) {
my $active = $blockentry =~ s/^#// ? 0 : 1;
$blockentry =~ s/^([1-9])/+$1/;
push @block_list_to_sort, { entry => $blockentry, active => $active };
}
my $bg = '';
@ -2494,6 +2494,7 @@ sub edit_list : Local {
sub do_edit_list : Local {
my ( $self, $c ) = @_;
$c->stash->{template} = 'tt/subscriber_edit_list.tt';
my %messages;
my $subscriber;
@ -2512,45 +2513,29 @@ sub do_edit_list : Local {
);
my $list = $c->request->params->{list_name};
# input text field to add new entry to block list
my $add = $c->request->params->{block_add};
if(defined $add) {
if($add =~ /^\+?[?*0-9\[\]-]+$/) {
my $ccdp = $c->config->{cc_dial_prefix};
my $acdp = $c->config->{ac_dial_prefix};
if($add =~ /^\*/ or $add =~ /^\?/ or $add =~ /^\[/) {
# do nothing
} elsif($add =~ s/^\+// or $add =~ s/^$ccdp//) {
# nothing more to do
} elsif($add =~ s/^$acdp//) {
$add = $$subscriber{cc} . $add;
} else {
$add = $$subscriber{cc} . $$subscriber{ac} . $add;
}
my $del = $c->request->params->{block_del};
my $act = $c->request->params->{block_act};
if (defined $add) { # input text field to add new entry to block list
my $checkresult;
$add =~ s/^ *//;
$add =~ s/ *$//;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'check_E164_simple_pattern', $add, \$checkresult);
if ($checkresult) {
my $blocklist = $$preferences{$list};
$blocklist = [] unless defined $blocklist;
$blocklist = [ $blocklist ] unless ref $blocklist;
$$preferences{$list} = [ @$blocklist, $add ];
} else {
$messages{msgadd} = 'Client.Voip.MalformedNumberPattern';
}
else {
$messages{msgadd} = 'Client.Syntax.InvalidE164Pattern';
$c->session->{blockaddtxt} = $add;
}
}
# delete link next to entries in block list
my $del = $c->request->params->{block_del};
if(defined $del) {
elsif (defined $del) { # delete link next to entries in block list
my $blocklist = $$preferences{$list};
if(defined $blocklist) {
my $ccdp = $c->config->{cc_dial_prefix};
my $acdp = $c->config->{ac_dial_prefix};
if($del =~ /^\*/ or $del =~ /^\?/ or $del =~ /^\[/) {
# do nothing
} elsif($del =~ s/^\+// or $del =~ s/^$ccdp//) {
# nothing more to do
} elsif($del =~ s/^$acdp//) {
$del = $$subscriber{cc} . $del;
}
if (defined $blocklist) {
$blocklist = [ $blocklist ] unless ref $blocklist;
if($c->request->params->{block_stat}) {
$$preferences{$list} = [ grep { $_ ne $del } @$blocklist ];
@ -2559,21 +2544,9 @@ sub do_edit_list : Local {
}
}
}
# activate/deactivate link next to entries in block list
my $act = $c->request->params->{block_act};
if(defined $act) {
elsif (defined $act) { # activate/deactivate link next to entries in block list
my $blocklist = $$preferences{$list};
if(defined $blocklist) {
my $ccdp = $c->config->{cc_dial_prefix};
my $acdp = $c->config->{ac_dial_prefix};
if($act =~ /^\*/ or $act =~ /^\?/ or $act =~ /^\[/) {
# do nothing
} elsif($act =~ s/^\+// or $act =~ s/^$ccdp//) {
# nothing more to do
} elsif($act =~ s/^$acdp//) {
$act = $$subscriber{cc} . $act;
}
if (defined $blocklist) {
$blocklist = [ $blocklist ] unless ref $blocklist;
if($c->request->params->{block_stat}) {
$$preferences{$list} = [ grep { $_ ne $act } @$blocklist ];
@ -2587,21 +2560,20 @@ sub do_edit_list : Local {
unless(keys %messages) {
$c->model('Provisioning')->call_prov( $c, 'voip', 'set_subscriber_preferences',
{ username => $$subscriber{username},
domain => $$subscriber{domain},
preferences => {
$list => $$preferences{$list},
},
},
undef
);
{ username => $$subscriber{username},
domain => $$subscriber{domain},
preferences => {
$list => $$preferences{$list},
},
},
undef
);
} else {
$messages{numerr} = 'Client.Voip.InputErrorFound';
}
$c->session->{messages} = \%messages;
$c->response->redirect("/subscriber/edit_list?subscriber_id=$subscriber_id&list_name=$list");
}
sub edit_iplist : Local {

@ -85,7 +85,7 @@
<input type="hidden" name="list_name" value="[% list_name %]" />
<div class="span-14">
<input type="text" size="20" name="block_add" id="blockaddtxt" value="[% blockaddtxt %]"
title="E.164 number string with shell pattern wildcards (*, ?), with international prefix or as local number, will be normalized to international format" />
title="E.164 number string with shell pattern wildcards (*, ? and '[x-y]' with 'x' and 'y' representing numbers from 0 to 9). 0 is invalid at the beginning" />
</div>
<div class="span-1 last">
<button class="button-add" id="blockadd">Add</button>

Loading…
Cancel
Save