added domain preferences functions and templates


			
			
				3.1
			
			
		
Daniel Tiefnig 15 years ago
parent b9e4dd0071
commit 4dfe9fd774

@ -21,6 +21,7 @@
audiofile_features="[% www_admin.subscriber.audiofile_features %]"
/>
<domain rewrite_features="[% www_admin.domain.rewrite_features %]"
preference_features="[% www_admin.domain.preference_features %]"
audiofile_features="[% www_admin.domain.audiofile_features %]"
vsc_features="[% www_admin.domain.vsc_features %]"
/>

@ -5,6 +5,8 @@ use warnings;
use base 'Catalyst::Controller';
use Data::Dumper;
use admin::Utils;
=head1 NAME
admin::Controller::domain - Catalyst Controller
@ -328,6 +330,283 @@ sub delete_rewrite : Local {
return;
}
=head2 preferences
Show preferences for a given domain.
=cut
sub preferences : Local {
my ( $self, $c ) = @_;
$c->stash->{template} = 'tt/domain_preferences.tt';
my $domain = $c->request->params->{domain};
$c->stash->{domain} = $domain;
my $preferences;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_domain_preferences',
{
domain => $domain,
},
\$preferences
);
my $db_prefs;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_preferences',
undef, \$db_prefs
);
$db_prefs = [ grep { $$_{dom_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 domain preferences in the database.
=cut
sub update_preferences : Local {
my ( $self, $c ) = @_;
my $domain = $c->request->params->{domain};
$c->stash->{domain} = $domain;
my $preferences;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_domain_preferences',
{
domain => $domain,
},
\$preferences
);
my $db_prefs;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_preferences',
undef, \$db_prefs
);
$db_prefs = [ grep { $$_{dom_pref} } @$db_prefs ] if eval { @$db_prefs };
return unless admin::Utils::prepare_db_prefs($c, $db_prefs, $preferences, $domain);
### save settings ###
unless(eval {keys %{$c->session->{messages}} }) {
if($c->model('Provisioning')->call_prov( $c, 'voip', 'set_domain_preferences',
{ domain => $domain,
preferences => $preferences,
},
undef
))
{
$c->session->{messages}{prefmsg} = 'Server.Voip.SavedSettings';
$c->response->redirect("/domain/preferences?domain=$domain");
return;
}
} else {
$c->session->{messages}{preferr} = 'Client.Voip.InputErrorFound';
}
$c->session->{restore_preferences_input} = $preferences;
$c->response->redirect("/domain/preferences?domain=$domain&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/domain_edit_list.tt';
my $domain = $c->request->params->{domain};
$c->stash->{domain} = $domain;
my $preferences;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_domain_preferences',
{ domain => $domain },
\$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 $domain = $c->request->params->{domain};
$c->stash->{domain} = $domain;
my $preferences;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_domain_preferences',
{ domain => $domain },
\$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_domain_preferences',
{ domain => $domain,
preferences => {
$list => $$preferences{$list},
},
},
undef
);
} else {
$c->session->{messages}{numerr} = 'Client.Voip.InputErrorFound';
}
$c->response->redirect("/domain/edit_list?domain=$domain&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/domain_edit_iplist.tt';
my $domain = $c->request->params->{domain};
$c->stash->{domain} = $domain;
my $preferences;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_domain_preferences',
{ domain => $domain },
\$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 $domain = $c->request->params->{domain};
$c->stash->{domain} = $domain;
my $preferences;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_domain_preferences',
{ domain => $domain },
\$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_domain_preferences',
{ domain => $domain,
preferences => {
$list => $$preferences{$list},
},
},
undef
);
} else {
$c->session->{messages}{numerr} = 'Client.Voip.InputErrorFound';
}
$c->response->redirect("/domain/edit_iplist?domain=$domain&list_name=$list");
}
=head2 audio
Show audio file details for a given domain.

@ -3,6 +3,7 @@ use strict;
use warnings;
use Time::Local;
use HTML::Entities;
# Takes a search result total count, an offset and a limit and returns
# an array containing offset values for a pagination link list
@ -237,5 +238,302 @@ sub prepare_call_list {
return $callentries;
}
# this prepares the list of preferences for display in the template
sub prepare_tt_prefs {
my ($c, $db_prefs, $preferences) = @_;
my @stashprefs;
foreach my $pref (eval { @$db_prefs }) {
# managed separately
next if $$pref{preference} eq 'lock';
if($$pref{preference} eq 'cfu'
or $$pref{preference} eq 'cfb'
or $$pref{preference} eq 'cft'
or $$pref{preference} eq 'cfna')
{
if(defined $$preferences{$$pref{preference}} and length $$preferences{$$pref{preference}}) {
my $vbdom = $c->config->{voicebox_domain};
my $fmdom = $c->config->{fax2mail_domain};
my $confdom = $c->config->{conference_domain};
if($$preferences{$$pref{preference}} =~ /\@$vbdom$/) {
$$preferences{$$pref{preference}} = 'voicebox';
} elsif($$preferences{$$pref{preference}} =~ /\@$fmdom$/) {
$$preferences{$$pref{preference}} = 'fax2mail';
} elsif($$preferences{$$pref{preference}} =~ /\@$confdom$/) {
$$preferences{$$pref{preference}} = 'conference';
}
}
} elsif(!$c->stash->{ncos_levels} and ($$pref{preference} eq 'ncos' or $$pref{preference} eq 'adm_ncos')) {
my $ncoslvl;
return unless $c->model('Provisioning')->call_prov( $c, 'billing', 'get_ncos_levels',
undef,
\$ncoslvl
);
$c->stash->{ncos_levels} = $ncoslvl if eval { @$ncoslvl };
} elsif($$pref{preference} eq 'block_in_list' or $$pref{preference} eq 'block_out_list') {
eval { @{$$preferences{$$pref{preference}}} = map { s/^([1-9])/+$1/; $_ } @{$$preferences{$$pref{preference}}} };
}
push @stashprefs,
{ key => $$pref{preference},
data_type => $$pref{data_type},
value => $$preferences{$$pref{preference}},
max_occur => $$pref{max_occur},
description => encode_entities($$pref{description}),
error => $c->session->{messages}{$$pref{preference}}
? $c->model('Provisioning')->localize($c->view($c->config->{view})->
config->{VARIABLES}{site_config}{language},
$c->session->{messages}{$$pref{preference}})
: undef,
};
}
return \@stashprefs;
}
# this prepares the list of preferences for the prov. interface
sub prepare_db_prefs {
my ($c, $db_prefs, $preferences, $domain, $username) = @_;
foreach my $db_pref (eval { @$db_prefs }) {
next if $$db_pref{read_only};
if($$db_pref{preference} eq 'cfu'
or $$db_pref{preference} eq 'cfb'
or $$db_pref{preference} eq 'cft'
or $$db_pref{preference} eq 'cfna')
{
my $vbdom = $c->config->{voicebox_domain};
my $fmdom = $c->config->{fax2mail_domain};
my $confdom = $c->config->{conference_domain};
my $fwtype = $$db_pref{preference};
my $fw_target_select = $c->request->params->{$fwtype .'_target'} || 'disable';
unless(defined $username) { # forwards for domains and peers are not supported
$c->session->{messages}{$fwtype} = 'Client.Voip.MalformedTarget';
next;
}
my $fw_target;
if($fw_target_select eq 'sipuri') {
$fw_target = $c->request->params->{$fwtype .'_sipuri'};
# normalize, so we can do some checks.
$fw_target =~ s/^sip://i;
if($fw_target =~ /^\+?\d+$/) {
$fw_target = admin::Utils::get_qualified_number_for_subscriber($c, $fw_target);
my $checkresult;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'check_E164_number', $fw_target, \$checkresult);
$c->session->{messages}{$fwtype} = 'Client.Voip.MalformedNumber'
unless $checkresult;
} elsif($fw_target =~ /^[a-z0-9&=+\$,;?\/_.!~*'()-]+\@[a-z0-9.-]+(:\d{1,5})?$/i) {
$fw_target = 'sip:'. lc $fw_target;
} elsif($fw_target =~ /^[a-z0-9&=+\$,;?\/_.!~*'()-]+$/) {
$fw_target = 'sip:'. lc($fw_target) .'@'. $domain;
} else {
$c->session->{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}."\@$vbdom";
} elsif($fw_target_select eq 'fax2mail') {
$fw_target = 'sip:'.$c->session->{subscriber}{cc}.$c->session->{subscriber}{ac}.$c->session->{subscriber}{sn}."\@$fmdom";
} elsif($fw_target_select eq 'conference') {
$fw_target = 'sip:conf='.$c->session->{subscriber}{cc}.$c->session->{subscriber}{ac}.$c->session->{subscriber}{sn}."\@$confdom";
}
$$preferences{$fwtype} = $fw_target;
} elsif($$db_pref{preference} eq 'cli') {
$$preferences{cli} = $c->request->params->{cli} or undef;
unless(defined $username) { # CLI for domains and peers is not supported
$c->session->{messages}{cli} = 'Client.Voip.MalformedNumber';
next;
}
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);
$c->session->{messages}{cli} = 'Client.Voip.MalformedNumber'
unless $checkresult;
}
} elsif($$db_pref{preference} eq 'cc') {
$$preferences{$$db_pref{preference}} = $c->request->params->{$$db_pref{preference}} || undef;
if(defined $$preferences{$$db_pref{preference}}) {
my $checkresult;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'check_cc',
$$preferences{$$db_pref{preference}}, \$checkresult
);
$c->session->{messages}{$$db_pref{preference}} = 'Client.Voip.MalformedCc'
unless $checkresult;
}
} elsif($$db_pref{preference} eq 'ac'
or $$db_pref{preference} eq 'svc_ac'
or $$db_pref{preference} eq 'emerg_ac')
{
$$preferences{$$db_pref{preference}} = $c->request->params->{$$db_pref{preference}} || undef;
if(defined $$preferences{$$db_pref{preference}}) {
my $checkresult;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'check_ac',
$$preferences{$$db_pref{preference}}, \$checkresult
);
$c->session->{messages}{$$db_pref{preference}} = 'Client.Voip.MalformedAc'
unless $checkresult;
}
} elsif($$db_pref{max_occur} != 1) {
# multi-value preferences are handled separately
} elsif($$db_pref{data_type} eq 'int' or $$db_pref{data_type} eq 'string') {
if(length $c->request->params->{$$db_pref{preference}}) {
$$preferences{$$db_pref{preference}} = $c->request->params->{$$db_pref{preference}};
} else {
$$preferences{$$db_pref{preference}} = undef;
}
} elsif($$db_pref{data_type} eq 'boolean') {
$$preferences{$$db_pref{preference}} = $c->request->params->{$$db_pref{preference}} ? 1 : undef;
} else {
# wtf? ignoring invalid preference
}
}
if($$preferences{cft}) {
unless(defined $$preferences{ringtimeout} and $$preferences{ringtimeout} =~ /^\d+$/
and $$preferences{ringtimeout} < 301 and $$preferences{ringtimeout} > 4)
{
$c->session->{messages}{ringtimeout} = 'Client.Voip.MissingRingtimeout';
}
}
return 1;
}
# this prepares a list preferences for display in the template
sub prepare_tt_list {
my ($c, $list) = @_;
my (@list_to_sort, @sorted_list);
foreach my $entry (@$list) {
my $active = $entry =~ s/^#// ? 0 : 1;
$entry =~ s/^([1-9])/+$1/;
push @list_to_sort, { entry => $entry, active => $active };
}
my $bg = '';
my $i = 1;
foreach my $entry (sort {$a->{entry} cmp $b->{entry}} @list_to_sort) {
push @sorted_list, { number => $$entry{entry},
background => $bg ? '' : 'tr_alt',
id => $i++,
active => $$entry{active},
};
$bg = !$bg;
}
return \@sorted_list;
}
# this adds, deletes, activates or deactivates entries from a block list
sub addelact_blocklist {
my ($c, $preferences, $list, $add, $del, $act) = @_;
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 = $$preferences{cc} . $add;
} else {
$add = $$preferences{cc} . $$preferences{ac} . $add;
}
my $blocklist = $$preferences{$list};
$blocklist = [] unless defined $blocklist;
$blocklist = [ $blocklist ] unless ref $blocklist;
$$preferences{$list} = [ @$blocklist, $add ];
} else {
$c->session->{messages}{msgadd} = 'Client.Voip.MalformedNumberPattern';
$c->session->{blockaddtxt} = $add;
}
}
if(defined $del) {
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 = $$preferences{cc} . $del;
}
$blocklist = [ $blocklist ] unless ref $blocklist;
if($c->request->params->{block_stat}) {
$$preferences{$list} = [ grep { $_ ne $del } @$blocklist ];
} else {
$$preferences{$list} = [ grep { $_ ne '#'.$del } @$blocklist ];
}
}
}
if(defined $act) {
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 = $c->session->{subscriber}{cc} . $act;
}
$blocklist = [ $blocklist ] unless ref $blocklist;
if($c->request->params->{block_stat}) {
$$preferences{$list} = [ grep { $_ ne $act } @$blocklist ];
push @{$$preferences{$list}}, '#'.$act;
} else {
$$preferences{$list} = [ grep { $_ ne '#'.$act } @$blocklist ];
push @{$$preferences{$list}}, $act;
}
}
}
return 1;
}
# this adds or deletes entries from an IP list
sub addel_iplist {
my ($c, $preferences, $list, $add, $del) = @_;
if(defined $add) {
my $checkresult;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'check_ipnet', $add, \$checkresult);
if($checkresult) {
my $iplist = $$preferences{$list};
$iplist = [] unless defined $iplist;
$iplist = [ $iplist ] unless ref $iplist;
$$preferences{$list} = [ @$iplist, $add ];
} else {
$c->session->{messages}{msgadd} = 'Client.Syntax.MalformedIPNet';
$c->session->{listaddtxt} = $add;
}
}
if(defined $del) {
my $iplist = $$preferences{$list};
if(defined $iplist) {
$iplist = [ $iplist ] unless ref $iplist;
$$preferences{$list} = [ grep { $_ ne $del } @$iplist ];
}
}
return 1;
}
1;

@ -13,6 +13,8 @@
<div class="span-10 append-5">
[% IF Catalyst.config.domain.rewrite_features %]
<a href="/domain/rewrite?domain=[% domain.domain %]">[% domain.domain %]</a>
[% ELSIF Catalyst.config.domain.preference_features %]
<a href="/domain/preferences?domain=[% domain.domain %]">[% domain.domain %]</a>
[% ELSIF Catalyst.config.domain.audiofile_features %]
<a href="/domain/audio?domain=[% domain.domain %]">[% domain.domain %]</a>
[% ELSIF Catalyst.config.domain.vsc_features %]

@ -8,6 +8,9 @@
[% IF Catalyst.config.domain.rewrite_features %]
<li><a href="rewrite?domain=[% domain %]"><span>Rewrite Rules</span></a></li>
[% END %]
[% IF Catalyst.config.domain.preference_features %]
<li><a href="preferences?domain=[% domain %]"><span>Preferences</span></a></li>
[% END %]
[% IF Catalyst.config.domain.audiofile_features %]
<li class="selected"><a href="audio?domain=[% domain %]"><span>Announcements</span></a></li>
[% END %]

@ -0,0 +1,36 @@
<h2>Edit [% list_name %] for [% domain %]</h2>
<a href="preferences?domain=[% domain %]"><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="domain" value="[% domain %]" />
<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="/domain/do_edit_iplist" method="post">
<input type="hidden" name="domain" value="[% domain %]" />
<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 [% domain %]</h2>
<a href="preferences?domain=[% domain %]"><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="domain" value="[% domain %]" />
<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="domain" value="[% domain %]" />
<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="domain" value="[% domain %]" />
<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,187 @@
<h2> Domain [% domain %] </h2>
<!-- <a href="/domain"><span class="button-back">Back</span></a> -->
<div class="topsubmenu">
<ul>
[% IF Catalyst.config.domain.rewrite_features %]
<li><a href="rewrite?domain=[% domain %]"><span>Rewrite Rules</span></a></li>
[% END %]
[% IF Catalyst.config.domain.preference_features %]
<li class="selected"><a href="preferences?domain=[% domain %]"><span>Preferences</span></a></li>
[% END %]
[% IF Catalyst.config.domain.audiofile_features %]
<li><a href="audio?domain=[% domain %]"><span>Announcements</span></a></li>
[% END %]
[% IF Catalyst.config.domain.vsc_features %]
<li><a href="vsc?domain=[% domain %]"><span>VSCs</span></a></li>
[% END %]
</ul>
</div>
<div class="topsubmenudivider"> </div>
<h3 id="domainprefs">Domain Preferences</h3>
[% UNLESS Catalyst.session.admin.read_only %]
[% IF edit_preferences %]
<a href="preferences?domain=[% domain %]"><span class="button-cancel">Cancel</span></a>
[% ELSE %]
<a href="preferences?domain=[% domain %]&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="domain" value="[% domain %]" />
<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?domain=[% domain %]&amp;list_name=[% preference.key %]"><span class="button-edit">Edit List</span></a>
[% ELSE %]
<a href="edit_list?domain=[% domain %]&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>

@ -31,6 +31,9 @@
[% IF Catalyst.config.domain.rewrite_features %]
<li class="selected"><a href="rewrite?domain=[% domain.domain.domain %]"><span>Rewrite Rules</span></a></li>
[% END %]
[% IF Catalyst.config.domain.preference_features %]
<li><a href="preferences?domain=[% domain.domain.domain %]"><span>Preferences</span></a></li>
[% END %]
[% IF Catalyst.config.domain.audiofile_features %]
<li><a href="audio?domain=[% domain.domain.domain %]"><span>Announcements</span></a></li>
[% END %]

@ -8,6 +8,9 @@
[% IF Catalyst.config.domain.rewrite_features %]
<li><a href="rewrite?domain=[% domain %]"><span>Rewrite Rules</span></a></li>
[% END %]
[% IF Catalyst.config.domain.preference_features %]
<li><a href="preferences?domain=[% domain %]"><span>Preferences</span></a></li>
[% END %]
[% IF Catalyst.config.domain.audiofile_features %]
<li><a href="audio?domain=[% domain %]"><span>Announcements</span></a></li>
[% END %]

Loading…
Cancel
Save