untied call forwards, cfu, cfb, cfna, cft may now be set independently

2.1@2833
Daniel Tiefnig 15 years ago
parent cb8f02d1ae
commit 8c63e2d0a4

@ -537,14 +537,13 @@ sub preferences : Local {
{ {
if(defined $$preferences{$$pref{attribute}} and length $$preferences{$$pref{attribute}}) { if(defined $$preferences{$$pref{attribute}} and length $$preferences{$$pref{attribute}}) {
if($$preferences{$$pref{attribute}} =~ /\@voicebox\.local$/) { if($$preferences{$$pref{attribute}} =~ /\@voicebox\.local$/) {
$$cftarget{voicebox} = 1; $$preferences{$$pref{attribute}} = 'voicebox';
} elsif($$preferences{$$pref{attribute}} =~ /\@fax2mail\.local$/) { } elsif($$preferences{$$pref{attribute}} =~ /\@fax2mail\.local$/) {
$$cftarget{fax2mail} = 1; $$preferences{$$pref{attribute}} = 'fax2mail';
} else { } else {
$$cftarget{sipuri} = $$preferences{$$pref{attribute}}; $$preferences{$$pref{attribute}} =~ s/^sip://i;
$$cftarget{sipuri} =~ s/^sip://i; if($$preferences{$$pref{attribute}} =~ /^\+?\d+\@/) {
if($$cftarget{sipuri} =~ /^\+?\d+\@/) { $$preferences{$$pref{attribute}} =~ s/\@.*$//;
$$cftarget{sipuri} =~ s/\@.*$//;
} }
} }
} }
@ -575,23 +574,7 @@ sub preferences : Local {
}; };
} }
# OMG $c->stash->{subscriber}{preferences_array} = \@stashprefs;
# reorder preferences so "cftarget" appears just above "cfu" and friends
foreach my $stashpref (@stashprefs) {
if($$stashpref{key} eq 'cfu') {
push @{$c->stash->{subscriber}{preferences_array}},
{ key => 'cftarget',
value => $cftarget,
max_occur => 1,
error => $c->session->{messages}{cftarget}
? $c->model('Provisioning')->localize($c->view($c->config->{view})->
config->{VARIABLES}{site_config}{language},
$c->session->{messages}{cftarget})
: undef,
};
}
push @{$c->stash->{subscriber}{preferences_array}}, $stashpref;
}
} }
my $i = 1; my $i = 1;
@ -705,88 +688,55 @@ sub update_preferences : Local {
} }
### call forwarding ### ### call forwarding ###
foreach my $fwtype (qw(cfu cfb cft cfna)) {
my $fw_target_select = $c->request->params->{$fwtype .'_target'} || 'disable';
my $fw_target_select = $c->request->params->{fw_target}; my $fw_target;
unless($fw_target_select) { if($fw_target_select eq 'sipuri') {
$messages{target} = 'Client.Voip.MalformedTargetClass'; $fw_target = $c->request->params->{$fwtype .'_sipuri'};
}
my $fw_target;
if($fw_target_select eq 'sipuri') {
$fw_target = $c->request->params->{fw_sipuri};
# normalize, so we can do some checks. # normalize, so we can do some checks.
$fw_target =~ s/^sip://i; $fw_target =~ s/^sip://i;
if($fw_target =~ /^\+?\d+\@[a-z0-9.-]+$/i) { if($fw_target =~ /^\+?\d+\@[a-z0-9.-]+$/i) {
$fw_target =~ s/\@.+$//; $fw_target =~ s/\@.+$//;
} }
if($fw_target =~ /^\+?\d+$/) { if($fw_target =~ /^\+?\d+$/) {
if($fw_target =~ /^\+[1-9][0-9]+$/) { if($fw_target =~ /^\+[1-9][0-9]+$/) {
$fw_target = 'sip:'. $fw_target .'@'. $c->session->{subscriber}{domain}; $fw_target = 'sip:'. $fw_target .'@'. $c->session->{subscriber}{domain};
} elsif($fw_target =~ /^00[1-9][0-9]+$/) { } elsif($fw_target =~ /^00[1-9][0-9]+$/) {
$fw_target =~ s/^00/+/; $fw_target =~ s/^00/+/;
$fw_target = 'sip:'. $fw_target .'@'. $c->session->{subscriber}{domain}; $fw_target = 'sip:'. $fw_target .'@'. $c->session->{subscriber}{domain};
} elsif($fw_target =~ /^0[1-9][0-9]+$/) { } elsif($fw_target =~ /^0[1-9][0-9]+$/) {
$fw_target =~ s/^0/'+'.$c->session->{subscriber}{cc}/e; $fw_target =~ s/^0/'+'.$c->session->{subscriber}{cc}/e;
$fw_target = 'sip:'. $fw_target .'@'. $c->session->{subscriber}{domain}; $fw_target = 'sip:'. $fw_target .'@'. $c->session->{subscriber}{domain};
} else {
$messages{$fwtype} = 'Client.Voip.MalformedNumber';
$fw_target = $c->request->params->{$fwtype .'_sipuri'};
}
} elsif($fw_target =~ /^[a-z0-9&=+\$,;?\/_.!~*'()-]+\@[a-z0-9.-]+$/i) {
$fw_target = 'sip:'. lc $fw_target;
} elsif($fw_target =~ /^[a-z0-9&=+\$,;?\/_.!~*'()-]+$/) {
$fw_target = 'sip:'. lc($fw_target) .'@'. $c->session->{subscriber}{domain};
} else { } else {
$messages{target} = 'Client.Voip.MalformedNumber'; $messages{$fwtype} = 'Client.Voip.MalformedTarget';
$fw_target = $c->request->params->{fw_sipuri}; $fw_target = $c->request->params->{$fwtype .'_sipuri'};
} }
} elsif($fw_target =~ /^[a-z0-9&=+\$,;?\/_.!~*'()-]+\@[a-z0-9.-]+$/i) { } elsif($fw_target_select eq 'voicebox') {
$fw_target = 'sip:'. lc $fw_target; $fw_target = 'sip:vmu'.$c->session->{subscriber}{cc}.$c->session->{subscriber}{ac}.$c->session->{subscriber}{sn}.'@voicebox.local';
} elsif($fw_target =~ /^[a-z0-9&=+\$,;?\/_.!~*'()-]+$/) { } elsif($fw_target_select eq 'fax2mail') {
$fw_target = 'sip:'. lc($fw_target) .'@'. $c->session->{subscriber}{domain}; $fw_target = 'sip:'.$c->session->{subscriber}{cc}.$c->session->{subscriber}{ac}.$c->session->{subscriber}{sn}.'@fax2mail.local';
} else {
$messages{target} = 'Client.Voip.MalformedTarget';
$fw_target = $c->request->params->{fw_sipuri};
} }
} elsif($fw_target_select eq 'voicebox') { $$preferences{$fwtype} = $fw_target;
$fw_target = 'sip:vmu'.$c->session->{subscriber}{cc}.$c->session->{subscriber}{ac}.$c->session->{subscriber}{sn}.'@voicebox.local';
} elsif($fw_target_select eq 'fax2mail') {
$fw_target = 'sip:'.$c->session->{subscriber}{cc}.$c->session->{subscriber}{ac}.$c->session->{subscriber}{sn}.'@fax2mail.local';
} else {
# wtf?
} }
my $cfu = $c->request->params->{cfu};
my $cfb = $c->request->params->{cfb};
my $cft = $c->request->params->{cft};
my $cfna = $c->request->params->{cfna};
# clear all forwards
$$preferences{cfu} = undef;
$$preferences{cft} = undef;
$$preferences{cfb} = undef;
$$preferences{cfna} = undef;
$$preferences{ringtimeout} = undef; $$preferences{ringtimeout} = undef;
$$preferences{ringtimeout} = $c->request->params->{ringtimeout} || undef;
unless(defined $cfu or defined $cfb or defined $cft or defined $cfna) { unless(defined $$preferences{ringtimeout} and $$preferences{ringtimeout} =~ /^\d+$/
delete $messages{target} if exists $messages{target}; and $$preferences{ringtimeout} < 301 and $$preferences{ringtimeout} > 4)
} else { {
if(defined $cfu) { $messages{ringtimeout} = 'Client.Voip.MissingRingtimeout'
# forward unconditionally if $$preferences{cft};
$$preferences{cfu} = $fw_target;
} else {
if(defined $cfb) {
$$preferences{cfb} = $fw_target;
}
if(defined $cft) {
$$preferences{cft} = $fw_target;
}
if(defined $cfna) {
$$preferences{cfna} = $fw_target;
}
}
}
if(defined $$preferences{cft}) {
$$preferences{ringtimeout} = $c->request->params->{ringtimeout};
unless(defined $$preferences{ringtimeout} and $$preferences{ringtimeout} =~ /^\d+$/
and $$preferences{ringtimeout} < 301 and $$preferences{ringtimeout} > 4)
{
$messages{ringtimeout} = 'Client.Voip.MissingRingtimeout';
}
} }
### outgoing calls ### ### outgoing calls ###

@ -58,10 +58,6 @@
[% ELSIF preference.key == "block_in_clir" [% ELSIF preference.key == "block_in_clir"
|| preference.key == "adm_block_in_clir" || preference.key == "adm_block_in_clir"
|| preference.key == "clir" || preference.key == "clir"
|| preference.key == "cfu"
|| preference.key == "cfb"
|| preference.key == "cft"
|| preference.key == "cfna"
|| preference.key == "mct" || preference.key == "mct"
|| preference.key == "in_use" || preference.key == "in_use"
|| preference.key == "ignore_allowed_ips" %] || preference.key == "ignore_allowed_ips" %]
@ -91,47 +87,56 @@
disabled="disabled" [% IF preference.value %]checked="checked"[% END %] /> disabled="disabled" [% IF preference.value %]checked="checked"[% END %] />
</td> </td>
</tr> </tr>
[% ELSIF preference.key == "cftarget" %] [% ELSIF preference.key == "cfu"
|| preference.key == "cfb"
|| preference.key == "cft"
|| preference.key == "cfna" %]
<tr> <tr>
<td class="tdkey">[% preference.key %]:</td> <td class="tdkey">[% preference.key %]:</td>
<td> <td>
[% IF edit_preferences %] [% IF edit_preferences %]
<label for="[% preference.key %]disable">
<input type="radio" id="[% preference.key %]disable" value="disable" name="[% preference.key %]_target" class="radio"
[% IF preference.value == "" && ! preference.error %]checked="checked"[% END %] />
disable
</label>
<br clear="all" />
[% IF Catalyst.config.voicemail_features %] [% IF Catalyst.config.voicemail_features %]
<label for="cfvoicebox"> <label for="[% preference.key %]voicebox">
<input type="radio" id="cfvoicebox" value="voicebox" name="fw_target" class="radio" <input type="radio" id="[% preference.key %]voicebox" value="voicebox" name="[% preference.key %]_target" class="radio"
[% IF preference.value.voicebox %]checked="checked"[% END %] /> [% IF preference.value == "voicebox" %]checked="checked"[% END %] />
Voicebox Voicebox
</label> </label>
<br clear="all" /> <br clear="all" />
[% END %] [% END %]
[% IF Catalyst.config.fax_features %] [% IF Catalyst.config.fax_features %]
<label for="cffaxserver"> <label for="[% preference.key %]faxserver">
<input type="radio" id="cffaxserver" value="fax2mail" name="fw_target" class="radio" <input type="radio" id="[% preference.key %]faxserver" value="fax2mail" name="[% preference.key %]_target" class="radio"
[% IF preference.value.fax2mail %]checked="checked"[% END %] /> [% IF preference.value == "fax2mail" %]checked="checked"[% END %] />
Fax2Mail Fax2Mail
</label> </label>
<br clear="all" /> <br clear="all" />
[% END %] [% END %]
<label for="cfsipuri"> <label for="[% preference.key %]sipuri">
<input type="radio" id="cfsipuri" value="sipuri" name="fw_target" class="radio" <input type="radio" id="[% preference.key %]sipuri" value="sipuri" name="[% preference.key %]_target" class="radio"
[% IF preference.value.sipuri %]checked="checked"[% END %] /> [% IF (preference.value || preference.error) && preference.value != "voicebox" && preference.value != "fax2mail" %]checked="checked"[% END %] />
number or SIP-URI: number or SIP-URI:
</label> </label>
<input type="text" id="cfsipuritxt" name="fw_sipuri" size="25" value="[% preference.value.sipuri %]" <input type="text" id="[% preference.key %]sipuritxt" name="[% preference.key %]_sipuri" size="25"
[% IF ! edit_preferences %]class="disabled" disabled="disabled"[% END %] /> value="[% preference.value UNLESS preference.value == "voicebox" OR preference.value == "fax2mail" %]" />
[% ELSE %] [% ELSE %]
[% IF preference.value.voicebox %] [% IF preference.value == "voicebox" %]
Voicebox Voicebox
[% ELSIF preference.value.fax2mail %] [% ELSIF preference.value == "fax2mail" %]
Fax2Mail Fax2Mail
[% ELSE %] [% ELSE %]
<input type="text" size="25" value="[% preference.value.sipuri %]" <input type="text" size="25" value="[% preference.value %]"
class="disabled txtpreference" disabled="disabled" /> class="disabled txtpreference" disabled="disabled" />
[% END %] [% END %]
[% END %] [% END %]
</td> </td>
</tr> </tr>
[% IF messages.target %]<tr><td /><td><div class="errormsg">[% messages.target %]</div></td></tr>[% END %] [% IF preference.value.error %]<tr><td /><td><div class="errormsg">[% preference.value.error %]</div></td></tr>[% END %]
[% ELSIF preference.key == "base_cli" [% ELSIF preference.key == "base_cli"
|| preference.key == "extension" || preference.key == "extension"
|| preference.key == "lock" || preference.key == "lock"

Loading…
Cancel
Save