added peer host preferences functions and templates


			
			
				3.1
			
			
		
Daniel Tiefnig 14 years ago
parent 4dfe9fd774
commit 37b8243f66

@ -25,6 +25,8 @@
audiofile_features="[% www_admin.domain.audiofile_features %]"
vsc_features="[% www_admin.domain.vsc_features %]"
/>
<peer preference_features="[% www_admin.peer.preference_features %]"
/>
<default_admin_settings is_master="[% www_admin.default_admin_settings.is_master %]" is_active="[% www_admin.default_admin_settings.is_active %]"
read_only="[% www_admin.default_admin_settings.read_only %]" show_passwords="[% www_admin.default_admin_settings.show_passwords %]"
call_data="[% www_admin.default_admin_settings.call_data %]" />

@ -824,6 +824,293 @@ sub copy_rewrite : Local {
}
=head2 preferences
Show preferences for a given peer host.
=cut
sub preferences : Local {
my ( $self, $c ) = @_;
$c->stash->{template} = 'tt/peering_preferences.tt';
my $peerid = $c->request->params->{peerid};
my $peer_details;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_peer_host_details',
{ id => $peerid },
\$peer_details
);
$c->stash->{peer} = $peer_details;
my $preferences;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_peer_preferences',
{ id => $peerid },
\$preferences
);
my $db_prefs;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_preferences',
undef, \$db_prefs
);
$db_prefs = [ grep { $$_{peer_pref} } @$db_prefs ] if eval { @$db_prefs };
### restore data entered by the user ###
if(ref $c->session->{restore_preferences_input} eq 'HASH') {
if(ref $preferences eq 'HASH') {
$preferences = { %$preferences, %{$c->session->{restore_preferences_input}} };
} else {
$preferences = $c->session->{restore_preferences_input};
}
delete $c->session->{restore_preferences_input};
}
if(eval { @$db_prefs }) {
$c->stash->{preferences_array} = admin::Utils::prepare_tt_prefs($c, $db_prefs, $preferences);
}
$c->stash->{edit_preferences} = $c->request->params->{edit_preferences};
return 1;
}
=head2 update_preferences
Update peer host preferences in the database.
=cut
sub update_preferences : Local {
my ( $self, $c ) = @_;
my $peerid = $c->request->params->{peerid};
my $preferences;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_peer_preferences',
{ id => $peerid },
\$preferences
);
my $db_prefs;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_preferences',
undef, \$db_prefs
);
$db_prefs = [ grep { $$_{peer_pref} } @$db_prefs ] if eval { @$db_prefs };
return unless admin::Utils::prepare_db_prefs($c, $db_prefs, $preferences);
### save settings ###
unless(eval {keys %{$c->session->{messages}} }) {
if($c->model('Provisioning')->call_prov( $c, 'voip', 'set_peer_preferences',
{ id => $peerid,
preferences => $preferences,
},
undef
))
{
$c->session->{messages}{prefmsg} = 'Server.Voip.SavedSettings';
$c->response->redirect("preferences?peerid=$peerid");
return;
}
} else {
$c->session->{messages}{preferr} = 'Client.Voip.InputErrorFound';
}
$c->session->{restore_preferences_input} = $preferences;
$c->response->redirect("preferences?peerid=$peerid&edit_preferences=1");
return;
}
=head2 edit_list
Add, remove or activate/deactivate entries from a number list preference.
=cut
sub edit_list : Local {
my ( $self, $c ) = @_;
$c->stash->{template} = 'tt/peering_edit_list.tt';
my $peerid = $c->request->params->{peerid};
my $peer_details;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_peer_host_details',
{ id => $peerid },
\$peer_details
);
$c->stash->{peer} = $peer_details;
my $preferences;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_peer_preferences',
{ id => $peerid },
\$preferences
);
my $list = $c->request->params->{list_name};
if(defined $$preferences{$list}) {
my $block_list = ref $$preferences{$list} ? $$preferences{$list} : [ $$preferences{$list} ];
$c->stash->{list_data} = admin::Utils::prepare_tt_list($c, $block_list);
}
$c->stash->{list_name} = $list;
my $list_mode = $list;
$list_mode =~ s/list$/mode/;
$c->stash->{list_mode} = $$preferences{$list_mode};
$list_mode =~ s/mode$/clir/;
$c->stash->{block_in_clir} = $$preferences{$list_mode};
if(defined $c->session->{blockaddtxt}) {
$c->stash->{blockaddtxt} = $c->session->{blockaddtxt};
delete $c->session->{blockaddtxt};
}
return 1;
}
=head2 do_edit_list
Update a number list preference in the database.
=cut
sub do_edit_list : Local {
my ( $self, $c ) = @_;
my $peerid = $c->request->params->{peerid};
my $preferences;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_peer_preferences',
{ id => $peerid },
\$preferences
);
my $list = $c->request->params->{list_name};
# input text field to add new entry to block list
my $add = $c->request->params->{block_add};
# delete link next to entries in block list
my $del = $c->request->params->{block_del};
# activate/deactivate link next to entries in block list
my $act = $c->request->params->{block_act};
admin::Utils::addelact_blocklist($c, $preferences, $list, $add, $del, $act);
unless(eval {keys %{$c->session->{messages}} }) {
$c->model('Provisioning')->call_prov( $c, 'voip', 'set_peer_preferences',
{ id => $peerid,
preferences => {
$list => $$preferences{$list},
},
},
undef
);
} else {
$c->session->{messages}{numerr} = 'Client.Voip.InputErrorFound';
}
$c->response->redirect("edit_list?peerid=$peerid&list_name=$list");
}
=head2 edit_iplist
Add or remove entries from an IP list preference.
=cut
sub edit_iplist : Local {
my ( $self, $c ) = @_;
$c->stash->{template} = 'tt/peering_edit_iplist.tt';
my $peerid = $c->request->params->{peerid};
my $peer_details;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_peer_host_details',
{ id => $peerid },
\$peer_details
);
$c->stash->{peer} = $peer_details;
my $preferences;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_peer_preferences',
{ id => $peerid },
\$preferences
);
my $list = $c->request->params->{list_name};
$c->stash->{list_name} = $list;
if(defined $$preferences{$list}) {
my $iplist = ref $$preferences{$list} ? $$preferences{$list} : [ $$preferences{$list} ];
my $bg = '';
my $i = 1;
foreach my $entry (sort @$iplist) {
push @{$c->stash->{list_data}}, { ipnet => $entry,
background => $bg ? '' : 'tr_alt',
id => $i++,
};
$bg = !$bg;
}
}
if(defined $c->session->{listaddtxt}) {
$c->stash->{listaddtxt} = $c->session->{listaddtxt};
delete $c->session->{listaddtxt};
}
return 1;
}
=head2 do_edit_iplist
Update an IP list preference in the database.
=cut
sub do_edit_iplist : Local {
my ( $self, $c ) = @_;
my $peerid = $c->request->params->{peerid};
my $preferences;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_peer_preferences',
{ id => $peerid },
\$preferences
);
my $list = $c->request->params->{list_name};
# input text field to add new entry to IP list
my $add = $c->request->params->{list_add};
# delete link next to entries in IP list
my $del = $c->request->params->{list_del};
admin::Utils::addel_iplist($c, $preferences, $list, $add, $del);
unless(eval {keys %{$c->session->{messages}} }) {
$c->model('Provisioning')->call_prov( $c, 'voip', 'set_peer_preferences',
{ id => $peerid,
preferences => {
$list => $$preferences{$list},
},
},
undef
);
} else {
$c->session->{messages}{numerr} = 'Client.Voip.InputErrorFound';
}
$c->response->redirect("edit_iplist?peerid=$peerid&list_name=$list");
}
=head2 detail
Show SIP peering contract details.

@ -0,0 +1,36 @@
<h2>Edit [% list_name %] for Peer Host [% peer.peer_host.name %]</h2>
<a href="preferences?peerid=[% peer.peer_host.id %]"><span class="button-back">Back</span></a>
<div class="list_explanation">
The subscribers are limited to the following list of IP addresses.
An empty list does not limit the subscribers at all.
This list can be overridden by subscriber specific settings.
</div>
<div class="hspace-20"></div>
<ul class="cleanlist">
[% FOREACH listentry = list_data %]
<li class="ui-state-default">
<div class="span-15"> [% listentry.ipnet %] </div>
<form action="do_edit_iplist" method="post">
<div class="span-1 last">
<input type="hidden" name="peerid" value="[% peer.peer_host.id %]" />
<input type="hidden" name="list_name" value="[% list_name %]" />
<input type="hidden" name="list_del" value="[% listentry.ipnet %]" />
<button class="button-delete" id="listdel[% listentry.id %]">Delete</button>
</span>
</form>
</li>
[% END %]
</ul>
<div class="hspace-20"></div>
<form action="do_edit_iplist" method="post">
<input type="hidden" name="peerid" value="[% peer.peer_host.id %]" />
<input type="hidden" name="list_name" value="[% list_name %]" />
<label for="listaddtxt">New entry:</label><br />
<input type="text" size="20" name="list_add" id="listaddtxt" value="[% listaddtxt %]" /> &nbsp;
<button class="button-add" id="listadd">Add</button>
[% IF messages.msgadd %]<div class="error">[% messages.msgadd %]</div>[% END %]
<br clear="all" />
</form>

@ -0,0 +1,86 @@
<h2>Edit [% list_name %] for Peer Host [% peer.peer_host.name %]</h2>
<a href="preferences?peerid=[% peer.peer_host.id %]"><span class="button-back">Back</span></a>
[% IF messages.nummsg %]<div class="success">[% messages.nummsg %]</div>[% END %]
[% IF messages.numerr %]<div class="error">[% messages.numerr %]</div>[% END %]
<div class="hspace-20"></div>
<div class="list_explanation">
[% IF list_name == 'block_in_list' || list_name == 'adm_block_in_list' %]
[% IF list_mode %]
[% IF list_data %]
All incoming calls are blocked by default, only the following callers are allowed.<br />
[% ELSE %]
All incoming calls are currently blocked, exceptions may be added below.<br />
[% END %]
[% ELSE %]
[% IF list_data %]
All incoming calls are accepted by default, only the following callers are blocked.<br />
[% ELSE %]
All incoming calls are currently accepted, exceptions may be added below.<br />
[% END %]
[% END %]
[% IF block_in_clir %]
Anonymous calls (CLIR) are currently blocked!<br />
[% ELSE %]
Anonymous calls (CLIR) are currently accepted!<br />
[% END %]
[% ELSE %]
[% IF list_mode %]
[% IF list_data %]
All outgoing calls are blocked by default, only the following destinations are allowed.<br />
[% ELSE %]
All outgoing calls are currently blocked, exceptions may be added below.<br />
[% END %]
[% ELSE %]
[% IF list_data %]
All outgoing calls are allowed by default, only the following destinations are blocked.<br />
[% ELSE %]
All outgoing calls are currently allowed, exceptions may be added below.<br />
[% END %]
[% END %]
[% END %]
</div>
<ul class="cleanlist">
[% FOREACH blockentry = list_data %]
<li class="ui-state-default">
<div class="span-14[% IF blockentry.active == 0 %] listentry_disabled[% END %]"> [% blockentry.number %] </div>
<form action="do_edit_list" method="post">
<div class="span-1">
<input type="hidden" name="peerid" value="[% peer.peer_host.id %]" />
<input type="hidden" name="list_name" value="[% list_name %]" />
<input type="hidden" name="block_del" value="[% blockentry.number %]" />
<input type="hidden" name="block_stat" value="[% blockentry.active %]" />
<button class="button-delete" id="listdel[% blockentry.id %]">Delete</button>
</div>
</form>
<form action="do_edit_list" method="post">
<div class="span-1 last">
<input type="hidden" name="peerid" value="[% peer.peer_host.id %]" />
<input type="hidden" name="list_name" value="[% list_name %]" />
[% IF blockentry.active == 1 %]
<input type="hidden" name="block_act" value="[% blockentry.number %]" />
<input type="hidden" name="block_stat" value="1" />
<button class="button-deactivate" id="blockact[% blockentry.id %]">Deactivate</button>
[% ELSIF blockentry.active == 0 %]
<input type="hidden" name="block_act" value="[% blockentry.number %]" />
<input type="hidden" name="block_stat" value="0" />
<button class="button-activate" id="blockact[% blockentry.id %]">Activate</button>
[% END %]
</div>
</form>
</li>
[% END %]
</ul>
<div class="hspace-20"></div>
<form action="do_edit_list" method="post">
<input type="hidden" name="peerid" value="[% peer.peer_host.id %]" />
<input type="hidden" name="list_name" value="[% list_name %]" />
<label for="blockaddtxt">New entry:</label><br />
<input type="text" size="20" name="block_add" id="blockaddtxt" value="[% blockaddtxt %]" /> &nbsp;
<button class="button-add" id="blockadd">Add</button>
[% IF messages.msgadd %]<div class="error">[% messages.msgadd %]</div>[% END %]
<br clear="all" />
</form>

@ -0,0 +1,179 @@
<h2> Peer Host [% peer.peer_host.name %] </h2>
<a href="detail?group_id=[% peer.peer_host.group_id %]"><span class="button-back">Back</span></a><br /><br />
<div class="topsubmenu">
<ul>
<li><a href="rewrite?peer_id=[% peer.peer_host.id %]"><span>Rewrite Rules</span></a></li>
[% IF Catalyst.config.peer.preference_features %]
<li class="selected"><a href="preferences?peerid=[% peer.peer_host.id %]"><span>Preferences</span></a></li>
[% END %]
</ul>
</div>
<div class="topsubmenudivider"> </div>
<h3 id="peerprefs">Peer Host Preferences</h3>
[% UNLESS Catalyst.session.admin.read_only %]
[% IF edit_preferences %]
<a href="preferences?peerid=[% peer.peer_host.id %]"><span class="button-cancel">Cancel</span></a>
[% ELSE %]
<a href="preferences?peerid=[% peer.peer_host.id %]&amp;edit_preferences=1"><span class="button-edit">Edit</span></a>
[% END %]
[% END %]
[% IF messages.prefmsg %]<div class="success">[% messages.prefmsg %]</div>[% END %]
[% IF messages.preferr %]<div class="error">[% messages.preferr %]</div>[% END %]
[% IF edit_preferences && prov_error %]<div class="error">[% prov_error %]</div>[% END %]
<form action="update_preferences" method="post">
<input type="hidden" name="peerid" value="[% peer.peer_host.id %]" />
<div class="hspace-20"></div>
<ul class="cleanlist">
[% FOREACH preference = preferences_array %]
[% IF preference.max_occur == 1 %]
[% IF preference.key == "block_in_mode" || preference.key == "block_out_mode"
|| preference.key == "adm_block_in_mode" || preference.key == "adm_block_out_mode" %]
<li class="ui-state-default">
<div class="span-5" title="[% preference.description %]">[% preference.key %]:</div>
<div class="span-1"><span class="ui-icon ui-icon-help help" title="[% preference.description %]"></span></div>
<div class="span-10 last">
<select size="1" name="[% preference.key %]"
[% IF ! edit_preferences %]class="disabled" disabled="disabled"[% END %] >
<option value="0" [% IF ! preference.value %]selected="selected"[% END %]>blacklist</option>
<option value="1" [% IF preference.value %]selected="selected"[% END %]>whitelist</option>
</select>
</div>
</li>
[% ELSIF preference.key == "cfu"
|| preference.key == "cfb"
|| preference.key == "cft"
|| preference.key == "cfna" %]
<li class="ui-state-default [% IF edit_preferences %]high[% END %]">
<div class="span-5" title="[% preference.description %]">[% preference.key %]:</div>
<div class="span-1"><span class="ui-icon ui-icon-help help" title="[% preference.description %]"></span></div>
<div class="span-10 last">
[% IF edit_preferences %]
<input type="radio" id="[% preference.key %]disable" value="disable" name="[% preference.key %]_target" class="radio"
[% IF preference.value == "" && ! preference.error %]checked="checked"[% END %] />
<label for="[% preference.key %]disable">Disabled</label>
<br clear="all" />
[% IF Catalyst.config.voicemail_features %]
<input type="radio" id="[% preference.key %]voicebox" value="voicebox" name="[% preference.key %]_target" class="radio"
[% IF preference.value == "voicebox" %]checked="checked"[% END %] />
<label for="[% preference.key %]voicebox">Voicebox</label>
<br clear="all" />
[% END %]
[% IF Catalyst.config.fax_features %]
<input type="radio" id="[% preference.key %]faxserver" value="fax2mail" name="[% preference.key %]_target" class="radio"
[% IF preference.value == "fax2mail" %]checked="checked"[% END %] />
<label for="[% preference.key %]faxserver">Fax2Mail</label>
<br clear="all" />
[% END %]
[% IF Catalyst.config.conference_features %]
<input type="radio" id="[% preference.key %]conference" value="conference" name="[% preference.key %]_target" class="radio"
[% IF preference.value == "conference" %]checked="checked"[% END %] />
<label for="[% preference.key %]conference">Conference room</label>
<br clear="all" />
[% END %]
<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" && preference.value != "conference" %]checked="checked"[% END %] />
<label for="[% preference.key %]sipuri">Number or SIP-URI:</label>
<input type="text" id="[% preference.key %]sipuritxt" name="[% preference.key %]_sipuri" size="25"
value="[% preference.value UNLESS preference.value == "voicebox" OR preference.value == "fax2mail" OR preference.value == "conference" %]" />
[% ELSE %]
[% IF preference.value == "voicebox" %]
Voicebox
[% ELSIF preference.value == "fax2mail" %]
Fax2Mail
[% ELSIF preference.value == "conference" %]
Conference room
[% ELSE %]
<input type="text" size="25" value="[% preference.value %]"
class="disabled txtpreference" disabled="disabled" />
[% END %]
[% END %]
</div>
</li>
[% IF preference.value.error %]<div class="error">[% preference.value.error %]</div>[% END %]
[% ELSIF preference.key == "ncos" || preference.key == "adm_ncos"%]
<li class="ui-state-default">
<div class="span-5" title="[% preference.description %]">[% preference.key %]:</div>
<div class="span-1"><span class="ui-icon ui-icon-help help" title="[% preference.description %]"></span></div>
<div class="span-10 last">
[% IF ncos_levels %]
<select size="1" name="[% preference.key %]"
[% IF ! edit_preferences %]class="disabled" disabled="disabled"[% END %] >
<option value="" [% IF preference.value == "" %]
selected="selected"
[% END %]></option>
[% FOREACH lvl = ncos_levels %]
<option value="[% lvl.level %]"
[% IF preference.value == lvl.level %]selected="selected"[% END %]
>[% lvl.level %]</option>
[% END %]
</select>
[% ELSE %]
[% IF edit_preferences %]no NCOS levels defined[% END %]
[% END %]
</div>
</li>
[% ELSIF preference.data_type == "boolean" %]
<li class="ui-state-default">
<div class="span-5" title="[% preference.description %]">[% preference.key %]:</div>
<div class="span-1"><span class="ui-icon ui-icon-help help" title="[% preference.description %]"></span></div>
<div class="span-10 last">
<input type="checkbox" name="[% preference.key %]" class="checkbox"
[% IF ! edit_preferences %]disabled="disabled"[% END %]
[% IF preference.value %]checked="checked"[% END %] />
</div>
</li>
[% ELSE %]
<li class="ui-state-default">
<div class="span-5" title="[% preference.description %]">[% preference.key %]:</div>
<div class="span-1"><span class="ui-icon ui-icon-help help" title="[% preference.description %]"></span></div>
<div class="span-10 last">
<input type="text" name="[% preference.key %]" [% IF ! edit_preferences %]
class="disabled txtpreference" disabled="disabled"
[% ELSE %]
class="txtpreference"
[% END %]
value="[% preference.value %]" />
</div>
</li>
[% END %]
[% ELSE %]
<li class="ui-state-default">
<div class="span-5" title="[% preference.description %]">[% preference.key %]:</div>
<div class="span-1"><span class="ui-icon ui-icon-help help" title="[% preference.description %]"></span></div>
<div class="span-9">
[% IF preference.value %]
<select size="1" name="[% preference.key %]">
[% FOREACH pref_entry = preference.value %]
<option>[% pref_entry %]</option>
[% END %]
</select>
[% ELSE %]
<select size="1" name="[% preference.key %]"></select>
[% END %]
</div>
<div class="span-1 last">
[% IF ! edit_preferences && ! Catalyst.session.admin.read_only %]
[% IF preference.key == "allowed_ips" || preference.key == "man_allowed_ips" %]
<a href="edit_iplist?peerid=[% peer.peer_host.id %]&amp;list_name=[% preference.key %]"><span class="button-edit">Edit List</span></a>
[% ELSE %]
<a href="edit_list?peerid=[% peer.peer_host.id %]&amp;list_name=[% preference.key %]"><span class="button-edit">Edit List</span></a>
[% END %]
[% END %]
</div>
</li>
[% END %]
[% IF preference.error %]<div class="error">[% preference.error %]</div>[% END %]
[% END %]
</ul>
[% IF edit_preferences %]
<div class="hspace-20"></div>
<button name="submit" class="button-save">Save</button>
[% END %]
</form>

@ -23,13 +23,19 @@
</script>
<h2> Peer Host [% peer.peer_host.name %] </h2>
<h2> SIP Peering Rewrite Rules for host
<a class="noarrow" href="rewrite?peer_id=[% peer.peer_host.id %]">
[% peer.peer_host.name %]</a>
</h2>
<a href="detail?group_id=[% peer.peer_host.group_id %]"><span class="button-back">Back</span></a><br /><br />
<a href="detail?group_id=[% peer.peer_host.group_id %]"><span class="button-back">Back</span></a>
<div class="topsubmenu">
<ul>
<li class="selected"><a href="rewrite?peer_id=[% peer.peer_host.id %]"><span>Rewrite Rules</span></a></li>
[% IF Catalyst.config.peer.preference_features %]
<li><a href="preferences?peerid=[% peer.peer_host.id %]"><span>Preferences</span></a></li>
[% END %]
</ul>
</div>
<div class="topsubmenudivider"> </div>
[% IF all_peers.size > 0 %]
[% UNLESS Catalyst.session.admin.read_only %]

Loading…
Cancel
Save