mirror of https://github.com/sipwise/www_admin.git
parent
51eea17e95
commit
a75cd2fe27
@ -0,0 +1,203 @@
|
||||
package admin::Controller::number;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use base 'Catalyst::Controller';
|
||||
|
||||
=head1 NAME
|
||||
|
||||
admin::Controller::number - Catalyst Controller
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Catalyst Controller.
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
=head2 index
|
||||
|
||||
Display and edit local number blocks.
|
||||
|
||||
=cut
|
||||
|
||||
sub index : Private {
|
||||
my ( $self, $c ) = @_;
|
||||
$c->stash->{template} = 'tt/number.tt';
|
||||
|
||||
my $blocks;
|
||||
return unless $c->model('Provisioning')->call_prov( $c, 'billing', 'get_number_blocks',
|
||||
undef,
|
||||
\$blocks
|
||||
);
|
||||
$c->stash->{blocks} = $blocks if eval { @$blocks };
|
||||
|
||||
|
||||
$c->stash->{edit_cc} = $c->request->params->{edit_cc};
|
||||
$c->stash->{edit_ac} = $c->request->params->{edit_ac};
|
||||
$c->stash->{edit_sn_prefix} = $c->request->params->{edit_sn_prefix};
|
||||
|
||||
if(exists $c->session->{crefill}) {
|
||||
$c->stash->{crefill} = $c->session->{crefill};
|
||||
delete $c->session->{crefill};
|
||||
}
|
||||
if(exists $c->session->{erefill}) {
|
||||
$c->stash->{erefill} = $c->session->{erefill};
|
||||
delete $c->session->{erefill};
|
||||
} elsif($c->request->params->{edit_cc}) {
|
||||
foreach my $block (eval { @$blocks }) {
|
||||
if($$block{cc} == $c->stash->{edit_cc}
|
||||
and $$block{ac} == $c->stash->{edit_ac}
|
||||
and $$block{sn_prefix} == $c->stash->{edit_sn_prefix})
|
||||
{
|
||||
$c->stash->{erefill} = $block;
|
||||
last;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
=head2 do_create_block
|
||||
|
||||
Create a new number block in the database.
|
||||
|
||||
=cut
|
||||
|
||||
sub do_create_block : Local {
|
||||
my ( $self, $c ) = @_;
|
||||
|
||||
my %messages;
|
||||
my %settings;
|
||||
|
||||
$settings{cc} = $c->request->params->{cc};
|
||||
$settings{ac} = $c->request->params->{ac};
|
||||
$settings{sn_prefix} = $c->request->params->{sn_prefix};
|
||||
$settings{data}{sn_length} = $c->request->params->{sn_length};
|
||||
$settings{data}{allocable} = $c->request->params->{allocable} ? 1 : 0;
|
||||
$settings{data}{authoritative} = $c->request->params->{authoritative} ? 1 : 0;
|
||||
|
||||
unless(keys %messages) {
|
||||
if($c->model('Provisioning')->call_prov( $c, 'billing', 'create_number_block',
|
||||
\%settings,
|
||||
undef))
|
||||
{
|
||||
$messages{cblockmsg} = 'Web.NumberBlock.Created';
|
||||
$c->session->{messages} = \%messages;
|
||||
$c->response->redirect("/number#create_block");
|
||||
return;
|
||||
}
|
||||
$c->session->{crefill} = \%settings;
|
||||
$c->response->redirect("/number#create_block");
|
||||
return;
|
||||
}
|
||||
|
||||
$messages{cblockerr} = 'Client.Voip.InputErrorFound';
|
||||
$c->session->{messages} = \%messages;
|
||||
$c->session->{crefill} = \%settings;
|
||||
$c->response->redirect("/number#create_block");
|
||||
return;
|
||||
}
|
||||
|
||||
=head2 do_update_block
|
||||
|
||||
Update settings of a number block in the database.
|
||||
|
||||
=cut
|
||||
|
||||
sub do_update_block : Local {
|
||||
my ( $self, $c ) = @_;
|
||||
|
||||
my %messages;
|
||||
my %settings;
|
||||
|
||||
$settings{cc} = $c->request->params->{cc};
|
||||
$settings{ac} = $c->request->params->{ac};
|
||||
$settings{sn_prefix} = $c->request->params->{sn_prefix};
|
||||
unless(length $settings{cc} and length $settings{ac}) {
|
||||
$c->response->redirect("/number");
|
||||
return;
|
||||
}
|
||||
$settings{data}{allocable} = $c->request->params->{allocable} ? 1 : 0;
|
||||
$settings{data}{authoritative} = $c->request->params->{authoritative} ? 1 : 0;
|
||||
|
||||
unless(keys %messages) {
|
||||
if($c->model('Provisioning')->call_prov( $c, 'billing', 'update_number_block',
|
||||
\%settings,
|
||||
undef))
|
||||
{
|
||||
$messages{eblockmsg} = 'Web.NumberBlock.Updated';
|
||||
$c->session->{messages} = \%messages;
|
||||
$c->response->redirect("/number");
|
||||
return;
|
||||
}
|
||||
$c->session->{erefill} = \%settings;
|
||||
$c->response->redirect("/number?edit_cc=$settings{cc}&edit_ac=$settings{ac}&edit_sn_prefix=$settings{sn_prefix}");
|
||||
return;
|
||||
}
|
||||
|
||||
$messages{eblockerr} = 'Client.Voip.InputErrorFound';
|
||||
$c->session->{messages} = \%messages;
|
||||
$c->session->{erefill} = \%settings;
|
||||
$c->response->redirect("/number?edit_cc=$settings{cc}&edit_ac=$settings{ac}&edit_sn_prefix=$settings{sn_prefix}");
|
||||
return;
|
||||
}
|
||||
|
||||
=head2 do_delete_block
|
||||
|
||||
Delete a number block from the database.
|
||||
|
||||
=cut
|
||||
|
||||
sub do_delete_block : Local {
|
||||
my ( $self, $c ) = @_;
|
||||
|
||||
my %settings;
|
||||
|
||||
$settings{cc} = $c->request->params->{cc};
|
||||
$settings{ac} = $c->request->params->{ac};
|
||||
$settings{sn_prefix} = $c->request->params->{sn_prefix};
|
||||
unless(length $settings{cc} and length $settings{ac}) {
|
||||
$c->response->redirect("/number");
|
||||
return;
|
||||
}
|
||||
|
||||
if($c->model('Provisioning')->call_prov( $c, 'billing', 'delete_number_block',
|
||||
\%settings,
|
||||
undef))
|
||||
{
|
||||
$c->session->{messages} = { eblockmsg => 'Web.NumberBlock.Deleted' };
|
||||
$c->response->redirect("/number");
|
||||
return;
|
||||
}
|
||||
|
||||
$c->response->redirect("/number");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
=head1 BUGS AND LIMITATIONS
|
||||
|
||||
=over
|
||||
|
||||
=item none
|
||||
|
||||
=back
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
Provisioning model, Sipwise::Provisioning::Billing, Catalyst
|
||||
|
||||
=head1 AUTHORS
|
||||
|
||||
Daniel Tiefnig <dtiefnig@sipwise.com>
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
The number controller is Copyright (c) 2010 Sipwise GmbH, Austria. All
|
||||
rights reserved.
|
||||
|
||||
=cut
|
||||
|
||||
# ende gelaende
|
||||
1;
|
||||
@ -0,0 +1,145 @@
|
||||
<h3>Existing Number Blocks</h3>
|
||||
|
||||
<div class="p1">
|
||||
[% IF messages.eblockmsg %]<div class="goodmsg">[% messages.eblockmsg %]</div>[% END %]
|
||||
[% IF messages.eblockerr %]<div class="errormsg">[% messages.eblockerr %]</div>[% END %]
|
||||
[% IF erefill && prov_error %]<div class="errormsg">[% prov_error %]</div>[% END %]
|
||||
|
||||
[% IF blocks %]
|
||||
<table class="numberblocks">
|
||||
<tr class="table_header">
|
||||
<td style="width:60px;">cc</td>
|
||||
<td style="width:60px;">ac</td>
|
||||
<td style="width:80px;">sn_prefix</td>
|
||||
<td style="width:80px;">sn_length</td>
|
||||
<td class="tdcenter" style="width:100px;">authoritative</td>
|
||||
<td class="tdcenter" style="width:100px;">allocable</td>
|
||||
<td style="width:40px;" />
|
||||
<td style="width:60px;" />
|
||||
</tr>
|
||||
[% id = 0 %]
|
||||
[% FOREACH block = blocks %]
|
||||
[% id = id + 1 %]
|
||||
[% IF block.cc == edit_cc && block.ac == edit_ac && block.sn_prefix == edit_sn_prefix %]
|
||||
<tr>
|
||||
<form action="/number/do_update_block" method="post">
|
||||
<input type="hidden" name="cc" value="[% block.cc %]" />
|
||||
<input type="hidden" name="ac" value="[% block.ac %]" />
|
||||
<input type="hidden" name="sn_prefix" value="[% block.sn_prefix %]" />
|
||||
<td class="tdkey">[% block.cc %]</td>
|
||||
<td class="tdkey">[% block.ac %]</td>
|
||||
<td class="tdkey">[% block.sn_prefix %]</td>
|
||||
<td class="tdkey">[% block.data.sn_length %]</td>
|
||||
<td class="tdcenter">
|
||||
<input type="checkbox" class="checkbox" title="check if NGCP is authoritative for this number block"
|
||||
name="authoritative" [% IF erefill.data.authoritative %]checked="checked"[% END %] />
|
||||
</td>
|
||||
<td class="tdcenter">
|
||||
<input type="checkbox" class="checkbox" title="check if numbers should be automatically assigned from this number block"
|
||||
name="allocable" [% IF erefill.data.allocable %]checked="checked"[% END %] />
|
||||
</td>
|
||||
<td>
|
||||
<div class="postlink">
|
||||
<label for="blocksave[% id %]">save</label>
|
||||
<input type="image" class="hidden" src="/static/images/dot_trans.gif" alt="" id="blocksave[% id %]" />
|
||||
</div>
|
||||
</td>
|
||||
</form>
|
||||
<td><a href="/number" class="aaction">cancel</a></td>
|
||||
</tr>
|
||||
[% ELSE %]
|
||||
<tr>
|
||||
<td>[% block.cc %]</td>
|
||||
<td>[% block.ac %]</td>
|
||||
<td>[% block.sn_prefix %]</td>
|
||||
<td>[% block.data.sn_length %]</td>
|
||||
<td class="tdcenter">
|
||||
<input type="checkbox" class="checkbox" title="check if NGCP is authoritative for this number block"
|
||||
name="authoritative" disabled="disabled" [% IF block.data.authoritative %]checked="checked"[% END %] />
|
||||
</td>
|
||||
<td class="tdcenter">
|
||||
<input type="checkbox" class="checkbox" title="check if numbers should be automatically assigned from this number block"
|
||||
name="allocable" disabled="disabled" [% IF block.data.allocable %]checked="checked"[% END %] />
|
||||
</td>
|
||||
<td>
|
||||
[% UNLESS Catalyst.session.admin.read_only %]
|
||||
<a href="/number?edit_cc=[% block.cc %]&edit_ac=[% block.ac %]&edit_sn_prefix=[% block.sn_prefix %]" class="aaction">edit</a>
|
||||
[% END %]
|
||||
</td>
|
||||
<form action="/number/do_delete_block" method="post">
|
||||
<input type="hidden" name="cc" value="[% block.cc %]" />
|
||||
<input type="hidden" name="ac" value="[% block.ac %]" />
|
||||
<input type="hidden" name="sn_prefix" value="[% block.sn_prefix %]" />
|
||||
<td>
|
||||
[% UNLESS Catalyst.session.admin.read_only %]
|
||||
<div class="postlink">
|
||||
<label for="blockdel[% id %]">delete</label>
|
||||
<input type="image" class="hidden" src="/static/images/dot_trans.gif" alt="" id="blockdel[% id %]" />
|
||||
</div>
|
||||
[% END %]
|
||||
</td>
|
||||
</form>
|
||||
</tr>
|
||||
[% END %]
|
||||
[% END %]
|
||||
</table>
|
||||
[% ELSE %]
|
||||
No number blocks found in the database.
|
||||
[% END %]
|
||||
</div>
|
||||
|
||||
[% UNLESS Catalyst.session.admin.read_only %]
|
||||
<h3 id="create_block">Create Number Block</h3>
|
||||
|
||||
<div class="p1">
|
||||
[% IF messages.cblockmsg %]<div class="goodmsg">[% messages.cblockmsg %]</div>[% END %]
|
||||
[% IF messages.cblockerr %]<div class="errormsg">[% messages.cblockerr %]</div>[% END %]
|
||||
|
||||
<form action="/number/do_create_block" method="post">
|
||||
<table class="numberblocks">
|
||||
<tr class="table_header">
|
||||
<td style="width:60px;">cc</td>
|
||||
<td style="width:60px;">ac</td>
|
||||
<td style="width:80px;">sn_prefix</td>
|
||||
<td style="width:80px;">sn_length</td>
|
||||
<td class="tdcenter" style="width:100px;">authoritative</td>
|
||||
<td class="tdcenter" style="width:100px;">allocable</td>
|
||||
<td style="width:40px;" />
|
||||
<td style="width:60px;" />
|
||||
</tr>
|
||||
<tr>
|
||||
<td><input type="text" class="irealshort" title="country code, integer"
|
||||
name="cc" value="[% crefill.cc %]" />
|
||||
</td>
|
||||
<td><input type="text" class="irealshort" title="area code, integer"
|
||||
name="ac" value="[% crefill.ac %]" />
|
||||
</td>
|
||||
<td><input type="text" class="ishort" title="subscriber number prefix, numeric string"
|
||||
name="sn_prefix" value="[% crefill.sn_prefix %]" />
|
||||
</td>
|
||||
<td><input type="text" class="irealshort" title="subscriber number length, integer"
|
||||
name="sn_length" value="[% crefill.data.sn_length %]" />
|
||||
</td>
|
||||
<td class="tdcenter">
|
||||
<input type="checkbox" class="checkbox" title="check if NGCP is authoritative for this number block"
|
||||
name="authoritative" [% IF crefill.data.authoritative %]checked="checked"[% END %] />
|
||||
</td>
|
||||
<td class="tdcenter">
|
||||
<input type="checkbox" class="checkbox" title="check if numbers should be automatically assigned from this number block"
|
||||
name="allocable" [% IF crefill.data.allocable %]checked="checked"[% END %] />
|
||||
</td>
|
||||
<td>
|
||||
<div class="postlink">
|
||||
<label for="blockadd">add</label>
|
||||
<input type="image" class="hidden" src="/static/images/dot_trans.gif" alt="" id="blockadd" />
|
||||
</div>
|
||||
</td>
|
||||
<td />
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
[% IF crefill && prov_error %]<div class="errormsg">[% prov_error %]</div>[% END %]
|
||||
|
||||
</div>
|
||||
[% END %]
|
||||
|
||||
Loading…
Reference in new issue