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($$preferences{$$pref{attribute}} =~ /\@voicebox\.local$/) {
$$cftarget{voicebox} = 1;
$$preferences{$$pref{attribute}} = 'voicebox';
} elsif($$preferences{$$pref{attribute}} =~ /\@fax2mail\.local$/) {
$$cftarget{fax2mail} = 1;
$$preferences{$$pref{attribute}} = 'fax2mail';
} else {
$$cftarget{sipuri} = $$preferences{$$pref{attribute}};
$$cftarget{sipuri} =~ s/^sip://i;
if($$cftarget{sipuri} =~ /^\+?\d+\@/) {
$$cftarget{sipuri} =~ s/\@.*$//;
$$preferences{$$pref{attribute}} =~ s/^sip://i;
if($$preferences{$$pref{attribute}} =~ /^\+?\d+\@/) {
$$preferences{$$pref{attribute}} =~ s/\@.*$//;
}
}
}
@ -575,23 +574,7 @@ sub preferences : Local {
};
}
# OMG
# 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;
}
$c->stash->{subscriber}{preferences_array} = \@stashprefs;
}
my $i = 1;
@ -705,14 +688,12 @@ sub update_preferences : Local {
}
### 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};
unless($fw_target_select) {
$messages{target} = 'Client.Voip.MalformedTargetClass';
}
my $fw_target;
if($fw_target_select eq 'sipuri') {
$fw_target = $c->request->params->{fw_sipuri};
$fw_target = $c->request->params->{$fwtype .'_sipuri'};
# normalize, so we can do some checks.
$fw_target =~ s/^sip://i;
@ -730,63 +711,32 @@ sub update_preferences : Local {
$fw_target =~ s/^0/'+'.$c->session->{subscriber}{cc}/e;
$fw_target = 'sip:'. $fw_target .'@'. $c->session->{subscriber}{domain};
} else {
$messages{target} = 'Client.Voip.MalformedNumber';
$fw_target = $c->request->params->{fw_sipuri};
$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 {
$messages{target} = 'Client.Voip.MalformedTarget';
$fw_target = $c->request->params->{fw_sipuri};
$messages{$fwtype} = 'Client.Voip.MalformedTarget';
$fw_target = $c->request->params->{$fwtype .'_sipuri'};
}
} elsif($fw_target_select eq 'voicebox') {
$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;
unless(defined $cfu or defined $cfb or defined $cft or defined $cfna) {
delete $messages{target} if exists $messages{target};
} else {
if(defined $cfu) {
# forward unconditionally
$$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;
}
}
$$preferences{$fwtype} = $fw_target;
}
if(defined $$preferences{cft}) {
$$preferences{ringtimeout} = $c->request->params->{ringtimeout};
$$preferences{ringtimeout} = undef;
$$preferences{ringtimeout} = $c->request->params->{ringtimeout} || undef;
unless(defined $$preferences{ringtimeout} and $$preferences{ringtimeout} =~ /^\d+$/
and $$preferences{ringtimeout} < 301 and $$preferences{ringtimeout} > 4)
{
$messages{ringtimeout} = 'Client.Voip.MissingRingtimeout';
}
$messages{ringtimeout} = 'Client.Voip.MissingRingtimeout'
if $$preferences{cft};
}
### outgoing calls ###

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

Loading…
Cancel
Save