mirror of https://github.com/sipwise/www_admin.git
parent
89c4b1d964
commit
06d94fcb0d
@ -0,0 +1,397 @@
|
||||
package admin::Controller::lnp;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use base 'Catalyst::Controller';
|
||||
|
||||
=head1 NAME
|
||||
|
||||
admin::Controller::lnp - Catalyst Controller
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Catalyst Controller.
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
=head2 index
|
||||
|
||||
Display and edit LNP providers and numbers.
|
||||
|
||||
=cut
|
||||
|
||||
sub index : Private {
|
||||
my ( $self, $c ) = @_;
|
||||
$c->stash->{template} = 'tt/lnp.tt';
|
||||
|
||||
my $providers;
|
||||
return unless $c->model('Provisioning')->call_prov( $c, 'billing', 'get_lnp_providers',
|
||||
undef,
|
||||
\$providers
|
||||
);
|
||||
$c->stash->{providers} = $$providers{result} if eval { @{$$providers{result}} };
|
||||
|
||||
|
||||
$c->stash->{edit_provider} = $c->request->params->{edit_provider};
|
||||
$c->stash->{edit_number} = $c->request->params->{edit_number};
|
||||
|
||||
if(exists $c->session->{searched_lnp_numbers}) {
|
||||
$c->stash->{searched_numbers} = $c->session->{searched_lnp_numbers};
|
||||
$self->_do_search_numbers($c, $c->session->{searched_lnp_numbers})
|
||||
unless exists $c->session->{lnp_numbers}{numbers};
|
||||
}
|
||||
# TODO: paginate!
|
||||
if(ref $c->session->{lnp_numbers}{numbers} eq 'ARRAY' and
|
||||
@{$c->session->{lnp_numbers}{numbers}})
|
||||
{
|
||||
my $nums = $c->session->{lnp_numbers};
|
||||
$c->stash->{numbers} = $$nums{numbers};
|
||||
$c->stash->{num_total_count} = $$nums{total_count};
|
||||
if($$nums{total_count} > @{$$nums{numbers}}) {
|
||||
$c->stash->{pagination} =
|
||||
admin::Utils::paginate($c, $nums, $c->session->{searched_lnp_numbers}{offset}, $c->session->{searched_lnp_numbers}{limit});
|
||||
$c->stash->{max_offset} = $#{$c->stash->{pagination}};
|
||||
# delete_number will decrease offset if no number remains on current page
|
||||
if(@{$$nums{numbers}} == 1) {
|
||||
$c->stash->{last_one} = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(exists $c->session->{parefill}) {
|
||||
$c->stash->{parefill} = $c->session->{parefill};
|
||||
delete $c->session->{parefill};
|
||||
}
|
||||
if(exists $c->session->{narefill}) {
|
||||
$c->stash->{narefill} = $c->session->{narefill};
|
||||
delete $c->session->{narefill};
|
||||
}
|
||||
if(exists $c->session->{nerefill}) {
|
||||
$c->stash->{nerefill} = $c->session->{nerefill};
|
||||
delete $c->session->{nerefill};
|
||||
} elsif($c->request->params->{edit_number}) {
|
||||
foreach my $num (eval { @{$c->session->{lnp_numbers}{numbers}} }) {
|
||||
if($$num{id} == $c->request->params->{edit_number}) {
|
||||
$c->stash->{nerefill} = $num;
|
||||
last;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
=head2 do_create_provider
|
||||
|
||||
Create a new LNP provider in the database.
|
||||
|
||||
=cut
|
||||
|
||||
sub do_create_provider : Local {
|
||||
my ( $self, $c ) = @_;
|
||||
|
||||
my %messages;
|
||||
my %settings;
|
||||
|
||||
$settings{id} = $c->request->params->{id};
|
||||
unless(defined $settings{id} and $settings{id} =~ /^\d+$/) {
|
||||
$messages{paddidmsg} = 'Web.Syntax.ID';
|
||||
}
|
||||
$settings{name} = $c->request->params->{name};
|
||||
unless(length $settings{name}) {
|
||||
$messages{paddnamsg} = 'Web.Syntax.LNPProvName';
|
||||
}
|
||||
|
||||
unless(keys %messages) {
|
||||
if($c->model('Provisioning')->call_prov( $c, 'billing', 'create_lnp_provider',
|
||||
{ %settings },
|
||||
undef))
|
||||
{
|
||||
$messages{provmsg} = 'Web.LNPProvider.Created';
|
||||
$c->session->{messages} = \%messages;
|
||||
$c->response->redirect("/lnp");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
$messages{proverr} = 'Client.Voip.InputErrorFound';
|
||||
$c->session->{messages} = \%messages;
|
||||
$c->session->{parefill} = \%settings;
|
||||
$c->response->redirect("/lnp");
|
||||
return;
|
||||
}
|
||||
|
||||
=head2 do_update_provider
|
||||
|
||||
Update settings of an LNP provider in the database.
|
||||
|
||||
=cut
|
||||
|
||||
sub do_update_provider : Local {
|
||||
my ( $self, $c ) = @_;
|
||||
|
||||
my %messages;
|
||||
my %settings;
|
||||
|
||||
my $provider = $c->request->params->{id};
|
||||
unless(defined $provider and $provider =~ /^\d+$/) {
|
||||
$c->response->redirect("/lnp");
|
||||
return;
|
||||
}
|
||||
my $name = $c->request->params->{name};
|
||||
unless(length $name) {
|
||||
$messages{peditnamsg} = 'Web.Syntax.LNPProvName';
|
||||
}
|
||||
|
||||
unless(keys %messages) {
|
||||
if($c->model('Provisioning')->call_prov( $c, 'billing', 'update_lnp_provider',
|
||||
{ id => $provider,
|
||||
name => $name,
|
||||
},
|
||||
undef))
|
||||
{
|
||||
$messages{provmsg} = 'Web.LNPProvider.Updated';
|
||||
$c->session->{messages} = \%messages;
|
||||
delete $c->session->{lnp_numbers};
|
||||
$c->response->redirect("/lnp");
|
||||
return;
|
||||
}
|
||||
$c->response->redirect("/lnp?edit_provider=$provider");
|
||||
return;
|
||||
}
|
||||
|
||||
$messages{proverr} = 'Client.Voip.InputErrorFound';
|
||||
$c->session->{messages} = \%messages;
|
||||
$c->response->redirect("/lnp?edit_provider=$provider");
|
||||
return;
|
||||
}
|
||||
|
||||
=head2 do_delete_provider
|
||||
|
||||
Delete an LNP provider from the database.
|
||||
|
||||
=cut
|
||||
|
||||
sub do_delete_provider : Local {
|
||||
my ( $self, $c ) = @_;
|
||||
|
||||
my $provider = $c->request->params->{id};
|
||||
unless(defined $provider and $provider =~ /^\d+$/) {
|
||||
$c->response->redirect("/lnp");
|
||||
return;
|
||||
}
|
||||
|
||||
if($c->model('Provisioning')->call_prov( $c, 'billing', 'delete_lnp_provider',
|
||||
{ id => $provider },
|
||||
undef))
|
||||
{
|
||||
$c->session->{messages} = { provmsg => 'Web.LNPProvider.Deleted' };
|
||||
delete $c->session->{lnp_numbers};
|
||||
$c->response->redirect("/lnp");
|
||||
return;
|
||||
}
|
||||
|
||||
$c->response->redirect("/lnp");
|
||||
return;
|
||||
}
|
||||
|
||||
=head2 search_numbers
|
||||
|
||||
Search LNP numbers in the database.
|
||||
|
||||
=cut
|
||||
|
||||
sub search_numbers : Local {
|
||||
my ( $self, $c ) = @_;
|
||||
|
||||
my %filter;
|
||||
|
||||
$filter{lnp_provider_id} = $c->request->params->{search_provid}
|
||||
if $c->request->params->{search_provid};
|
||||
$filter{number} = $c->request->params->{search_number}
|
||||
if $c->request->params->{search_number};
|
||||
$filter{exact_number} = $c->request->params->{exact_number};
|
||||
$filter{offset} = $c->request->params->{offset} || 0;
|
||||
$filter{limit} = 10;
|
||||
|
||||
$self->_do_search_numbers($c, \%filter);
|
||||
$c->session->{searched_lnp_numbers} = \%filter;
|
||||
|
||||
$c->response->redirect("/lnp#search_numbers");
|
||||
return;
|
||||
}
|
||||
|
||||
=head2 do_create_number
|
||||
|
||||
Create a new ported number in the database.
|
||||
|
||||
=cut
|
||||
|
||||
sub do_create_number : Local {
|
||||
my ( $self, $c ) = @_;
|
||||
|
||||
my %messages;
|
||||
my %settings;
|
||||
|
||||
$settings{number} = $c->request->params->{number};
|
||||
$settings{number} =~ s/^00//;
|
||||
$settings{number} =~ s/^\+//;
|
||||
$settings{lnp_provider_id} = $c->request->params->{lnp_provider_id};
|
||||
$settings{start} = $c->request->params->{start}
|
||||
if $c->request->params->{start};
|
||||
$settings{end} = $c->request->params->{end}
|
||||
if $c->request->params->{end};
|
||||
|
||||
unless(keys %messages) {
|
||||
if($c->model('Provisioning')->call_prov( $c, 'billing', 'create_lnp_number',
|
||||
{ data => \%settings },
|
||||
undef))
|
||||
{
|
||||
$messages{cnumsg} = 'Web.LNPNumber.Created';
|
||||
$c->session->{messages} = \%messages;
|
||||
delete $c->session->{lnp_numbers};
|
||||
$c->response->redirect("/lnp#create_number");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
$c->session->{messages} = \%messages;
|
||||
$c->session->{narefill} = \%settings;
|
||||
$c->response->redirect("/lnp#create_number");
|
||||
return;
|
||||
}
|
||||
|
||||
=head2 do_update_number
|
||||
|
||||
Update an existing ported number in the database.
|
||||
|
||||
=cut
|
||||
|
||||
sub do_update_number : Local {
|
||||
my ( $self, $c ) = @_;
|
||||
|
||||
my %messages;
|
||||
my %settings;
|
||||
|
||||
my $id = $c->request->params->{id};
|
||||
unless(defined $id and $id =~ /^\d+$/) {
|
||||
$c->response->redirect("/lnp");
|
||||
return;
|
||||
}
|
||||
|
||||
$settings{number} = $c->request->params->{number};
|
||||
$settings{number} =~ s/^00//;
|
||||
$settings{number} =~ s/^\+//;
|
||||
$settings{lnp_provider_id} = $c->request->params->{lnp_provider_id};
|
||||
$settings{start} = $c->request->params->{start}
|
||||
if $c->request->params->{start};
|
||||
$settings{end} = $c->request->params->{end}
|
||||
if $c->request->params->{end};
|
||||
|
||||
unless(keys %messages) {
|
||||
if($c->model('Provisioning')->call_prov( $c, 'billing', 'update_lnp_number',
|
||||
{ id => $id,
|
||||
data => \%settings
|
||||
},
|
||||
undef))
|
||||
{
|
||||
$messages{cnumsg} = 'Web.LNPNumber.Updated';
|
||||
$c->session->{messages} = \%messages;
|
||||
delete $c->session->{lnp_numbers};
|
||||
$c->response->redirect("/lnp#stored_numbers");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
$c->session->{messages} = \%messages;
|
||||
$c->session->{nerefill} = \%settings;
|
||||
$c->response->redirect("/lnp?edit_number=$id#stored_numbers");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
=head2 do_delete_number
|
||||
|
||||
Delete a ported number from the database.
|
||||
|
||||
=cut
|
||||
|
||||
sub do_delete_number : Local {
|
||||
my ( $self, $c ) = @_;
|
||||
|
||||
my $id = $c->request->params->{id};
|
||||
|
||||
if($id and
|
||||
$c->model('Provisioning')->call_prov( $c, 'billing', 'delete_lnp_number',
|
||||
{ id => $id },
|
||||
undef))
|
||||
{
|
||||
$c->session->{messages}{enumsg} = 'Web.LNPNumber.Deleted';
|
||||
$c->session->{searched_lnp_numbers}{offset}-- if $c->request->params->{last_one};
|
||||
delete $c->session->{lnp_numbers};
|
||||
}
|
||||
|
||||
$c->response->redirect("/lnp#stored_numbers");
|
||||
return;
|
||||
}
|
||||
|
||||
sub _do_search_numbers {
|
||||
my ( $self, $c, $filter ) = @_;
|
||||
|
||||
my %sfilter;
|
||||
$sfilter{number} = $$filter{number} if defined $$filter{number};
|
||||
$sfilter{lnp_provider_id} = $$filter{lnp_provider_id} if defined $$filter{lnp_provider_id};
|
||||
$sfilter{number} = '%' . $sfilter{number} . '%' unless $$filter{exact_number};
|
||||
$sfilter{offset} = $$filter{offset} || 0;
|
||||
$sfilter{limit} = $$filter{limit};
|
||||
$sfilter{offset} *= $sfilter{limit};
|
||||
|
||||
return unless $c->model('Provisioning')->call_prov( $c, 'billing', 'get_lnp_numbers',
|
||||
{ filter => \%sfilter },
|
||||
\$c->session->{lnp_numbers}
|
||||
);
|
||||
|
||||
if(ref $c->session->{lnp_numbers}{numbers} eq 'ARRAY') {
|
||||
my $providers;
|
||||
return unless $c->model('Provisioning')->call_prov( $c, 'billing', 'get_lnp_providers',
|
||||
undef,
|
||||
\$providers
|
||||
);
|
||||
if(@{$$providers{result}}) {
|
||||
foreach my $num (@{$c->session->{lnp_numbers}{numbers}}) {
|
||||
for(@{$$providers{result}}) {
|
||||
$$num{lnp_provider} = $$_{name}
|
||||
if $$num{lnp_provider_id} == $$_{id};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
=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 billing controller is Copyright (c) 2009 Sipwise GmbH, Austria. All
|
||||
rights reserved.
|
||||
|
||||
=cut
|
||||
|
||||
# ende gelaende
|
||||
1;
|
@ -0,0 +1,299 @@
|
||||
<h3 id="provider">LNP Providers</h3>
|
||||
|
||||
<div class="p1">
|
||||
[% IF messages.provmsg %]<div class="goodmsg">[% messages.provmsg %]</div>[% END %]
|
||||
[% IF messages.proverr %]<div class="errormsg">[% messages.proverr %]</div>[% END %]
|
||||
<table>
|
||||
<tr class="table_header">
|
||||
<td>ID</td>
|
||||
<td>name</td>
|
||||
<td />
|
||||
<td />
|
||||
</tr>
|
||||
[% FOREACH provider = providers %]
|
||||
[% IF provider.id == edit_provider %]
|
||||
<tr>
|
||||
<form action="/lnp/do_update_provider" method="post">
|
||||
<td>[% provider.id %]</td>
|
||||
<td>
|
||||
<input type="text" name="name" title="descriptive name, free-form"
|
||||
value="[% provider.name %]" />
|
||||
</td>
|
||||
<td>
|
||||
<input type="hidden" name="id" value="[% provider.id %]" />
|
||||
<div class="postlink">
|
||||
<label for="listedit[% provider.id %]">save</label>
|
||||
<input type="image" class="hidden" src="/static/images/dot_trans.gif"
|
||||
alt="" id="listedit[% provider.id %]" />
|
||||
</div>
|
||||
</td>
|
||||
<td><a href="/lnp" class="aaction">cancel</a></td>
|
||||
</form>
|
||||
</tr>
|
||||
[% IF messages.peditnamsg %]
|
||||
<tr><td colspan="4"><div class="errormsg">[% messages.peditnamsg %]</div></td></tr>
|
||||
[% END %]
|
||||
[% ELSE %]
|
||||
<tr>
|
||||
<td>[% provider.id %]</td>
|
||||
<td>[% provider.name %]</td>
|
||||
<td>
|
||||
[% UNLESS Catalyst.session.admin.read_only %]
|
||||
<a href="/lnp?edit_provider=[% provider.id %]" class="aaction">edit</a>
|
||||
[% END %]
|
||||
</td>
|
||||
<td>
|
||||
[% UNLESS Catalyst.session.admin.read_only %]
|
||||
<form action="/lnp/do_delete_provider" method="post">
|
||||
<input type="hidden" name="id" value="[% provider.id %]" />
|
||||
<div class="postlink">
|
||||
<label for="provdel[% provider.id %]">delete</label>
|
||||
<input type="image" class="hidden" src="/static/images/dot_trans.gif"
|
||||
alt="" id="provdel[% provider.id %]" />
|
||||
</div>
|
||||
</form>
|
||||
[% END %]
|
||||
</td>
|
||||
</tr>
|
||||
[% END %]
|
||||
[% END %]
|
||||
<tr>
|
||||
<form action="/lnp/do_create_provider" method="post">
|
||||
<td>
|
||||
<input type="text" class="ishort" name="id" title="unique, integer ID"
|
||||
value="[% parefill.id %]" />
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" name="name" title="descriptive name, free-form"
|
||||
value="[% parefill.name %]" />
|
||||
</td>
|
||||
<td>
|
||||
<div class="postlink">
|
||||
<label for="listpadd">add</label>
|
||||
<input type="image" class="hidden" src="/static/images/dot_trans.gif"
|
||||
alt="" id="listpadd" />
|
||||
</div>
|
||||
</td>
|
||||
<td />
|
||||
</form>
|
||||
</tr>
|
||||
</table>
|
||||
[% IF messages.paddidmsg %]<div class="errormsg">[% messages.paddidmsg %]</div>[% END %]
|
||||
[% IF messages.paddnamsg %]<div class="errormsg">[% messages.paddnamsg %]</div>[% END %]
|
||||
</div>
|
||||
|
||||
[% UNLESS Catalyst.session.admin.read_only %]
|
||||
<h3 id="create_number">Add Ported Number</h3>
|
||||
|
||||
<div class="p1">
|
||||
[% IF messages.cnumsg %]<div class="goodmsg">[% messages.cnumsg %]</div>[% END %]
|
||||
[% IF narefill && prov_error %]<div class="errormsg">[% prov_error %]</div>[% END %]
|
||||
<form action="/lnp/do_create_number" method="post">
|
||||
<table>
|
||||
<tr>
|
||||
<td>number</td>
|
||||
<td><input type="text" name="number" value="[% narefill.number %]"
|
||||
title="E.164 phone number with intl. prefix" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>provider</td>
|
||||
<td>
|
||||
<select size="1" name="lnp_provider_id">
|
||||
[% FOREACH provider = providers %]
|
||||
<option value="[% provider.id %]"
|
||||
[% IF narefill.lnp_provider_id == provider.id %]selected="selected"[% END %]
|
||||
>[% provider.name %]</option>
|
||||
[% END %]
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>start</td>
|
||||
<td><input type="text" name="start" value="[% narefill.start %]"
|
||||
title="SQL date or timestamp in "YYYY-MM-DD hh:mm:ss" format" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>end</td>
|
||||
<td><input type="text" name="end" value="[% narefill.end %]"
|
||||
title="SQL date or timestamp in "YYYY-MM-DD hh:mm:ss" format" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<input type="submit" value="Add »" class="but" />
|
||||
</form>
|
||||
</div>
|
||||
[% END %]
|
||||
|
||||
<h3 id="search_numbers">Search Ported Numbers</h3>
|
||||
|
||||
<div class="p1">
|
||||
<form action="lnp/search_numbers" method="post" class="search_subscriber">
|
||||
<label class="search_label" for="search_by_provid">Provider:</label>
|
||||
<select size="1" name="search_provid">
|
||||
<option value="0" [% UNLESS nerefill.lnp_provider_id %]selected="selected"[% END %] />
|
||||
[% FOREACH provider = providers %]
|
||||
<option value="[% provider.id %]"
|
||||
[% IF searched_numbers.lnp_provider_id == provider.id %]selected="selected"[% END %]
|
||||
>[% provider.name %]</option>
|
||||
[% END %]
|
||||
</select><br clear="all" />
|
||||
<label class="search_label" for="search_by_number">Number:</label>
|
||||
<input type="text" id="search_by_number" name="search_number" title="SQL wildcards allowed"
|
||||
value="[% searched_numbers.number %]"
|
||||
value="[% search_number %]" />
|
||||
<input type="checkbox" id="exact_number" name="exact_number"
|
||||
[% IF searched_numbers.exact_number %]checked="checked"[% END %] />
|
||||
<label for="exact_number">exact match</label><br />
|
||||
|
||||
<input type="submit" value="Search »" class="but" />
|
||||
</form>
|
||||
</div>
|
||||
|
||||
[% IF numbers %]
|
||||
<h3 id="stored_numbers">Found Ported Numbers</h3>
|
||||
|
||||
<div class="p1">
|
||||
[% IF messages.enumsg %]<div class="goodmsg">[% messages.enumsg %]</div>[% END %]
|
||||
<table width="100%" style="border-spacing: 0px">
|
||||
<tr class="table_header">
|
||||
<td>number</td>
|
||||
<td>provider ID</td>
|
||||
<td style="width:135px;" >start</td>
|
||||
<td style="width:135px;" >end</td>
|
||||
<td style="width:30px;" />
|
||||
<td style="width:30px;" />
|
||||
</tr>
|
||||
[% bgflip = 1 %]
|
||||
[% FOREACH number = numbers %]
|
||||
[% IF edit_number == number.id %]
|
||||
<form action="/lnp/do_update_number" method="post">
|
||||
[% IF bgflip %]
|
||||
[% bgflip = 0 %]
|
||||
<tr class="tr_alt">
|
||||
[% ELSE %]
|
||||
[% bgflip = 1 %]
|
||||
<tr>
|
||||
[% END %]
|
||||
<td><input type="text" class="ilnpnumedit" name="number" value="[% nerefill.number %]"
|
||||
title="E.164 phone number with intl. prefix" />
|
||||
</td>
|
||||
<td>
|
||||
<select size="1" class="ilnpproedit" name="lnp_provider_id">
|
||||
[% FOREACH provider = providers %]
|
||||
<option value="[% provider.id %]"
|
||||
[% IF nerefill.lnp_provider_id == provider.id %]selected="selected"[% END %]
|
||||
>[% provider.name %]</option>
|
||||
[% END %]
|
||||
</select>
|
||||
</td>
|
||||
<td><input type="text" class="ilnptimedit" name="start" value="[% nerefill.start %]"
|
||||
title="SQL date or timestamp in "YYYY-MM-DD hh:mm:ss" format" />
|
||||
</td>
|
||||
<td><input type="text" class="ilnptimedit" name="end" value="[% nerefill.end %]"
|
||||
title="SQL date or timestamp in "YYYY-MM-DD hh:mm:ss" format" />
|
||||
</td>
|
||||
<td>
|
||||
<input type="hidden" name="id" value="[% number.id %]" />
|
||||
<div class="postlink">
|
||||
<label for="numedit[% number.id %]">save</label>
|
||||
<input type="image" class="hidden" src="/static/images/dot_trans.gif"
|
||||
alt="" id="numedit[% number.id %]" />
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<a href="/lnp#stored_numbers" class="aaction">cancel</a>
|
||||
</td>
|
||||
</tr>
|
||||
[% IF nerefill && prov_error %]
|
||||
[% IF bgflip %]
|
||||
<tr>
|
||||
[% ELSE %]
|
||||
<tr class="tr_alt">
|
||||
[% END %]
|
||||
<td colspan="6"><div class="errormsg">[% prov_error %]</div></td>
|
||||
</tr>
|
||||
[% END %]
|
||||
</form>
|
||||
[% ELSE %]
|
||||
[% IF bgflip %]
|
||||
[% bgflip = 0 %]
|
||||
<tr class="tr_alt">
|
||||
[% ELSE %]
|
||||
[% bgflip = 1 %]
|
||||
<tr>
|
||||
[% END %]
|
||||
<td>[% number.number %]</td>
|
||||
<td>[% number.lnp_provider %]</td>
|
||||
<td style="white-space:nowrap;">[% number.start %]</td>
|
||||
<td style="white-space:nowrap;">[% number.end %]</td>
|
||||
<td>
|
||||
[% UNLESS Catalyst.session.admin.read_only %]
|
||||
<a href="/lnp?edit_number=[% number.id %]#stored_numbers" class="aaction">edit</a>
|
||||
[% END %]
|
||||
</td>
|
||||
<td>
|
||||
<form action="/lnp/do_delete_number" method="post">
|
||||
<input type="hidden" name="id" value="[% number.id %]" />
|
||||
<input type="hidden" name="last_one" value="[% last_one %]" />
|
||||
[% UNLESS Catalyst.session.admin.read_only %]
|
||||
<div class="postlink">
|
||||
<label for="numdel[% number.id %]">delete</label>
|
||||
<input type="image" class="hidden" src="/static/images/dot_trans.gif"
|
||||
alt="" id="numdel[% number.id %]" />
|
||||
</div>
|
||||
[% END %]
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
[% END %]
|
||||
[% END %]
|
||||
</table>
|
||||
|
||||
[% IF pagination %]
|
||||
<div class="pagination">
|
||||
<ul>
|
||||
[% IF searched_numbers.offset == 0 %]
|
||||
<li class="disablepage">« prev</li>
|
||||
[% ELSE %]
|
||||
<li class="nextpage">
|
||||
<a href="/lnp/search_numbers?offset=[% searched_numbers.offset - 1 %]#stored_numbers">« prev</a>
|
||||
</li>
|
||||
[% END %]
|
||||
[% FOREACH pagine = pagination %]
|
||||
[% IF pagine.offset == searched_numbers.offset %]
|
||||
<li class="currentpage">
|
||||
[% pagine.offset + 1 %]
|
||||
</li>
|
||||
[% ELSIF pagine.offset == -1 %]
|
||||
...
|
||||
[% ELSE %]
|
||||
<li>
|
||||
<a href="/lnp/search_numbers?offset=[% pagine.offset %]#stored_numbers">[% pagine.offset + 1 %]</a>
|
||||
</li>
|
||||
[% END %]
|
||||
[% END %]
|
||||
[% IF searched_numbers.offset >= max_offset %]
|
||||
<li class="disablepage">
|
||||
next »
|
||||
</li>
|
||||
[% ELSE %]
|
||||
<li class="nextpage">
|
||||
<a href="/lnp/search_numbers?offset=[% searched_numbers.offset + 1 %]#stored_numbers">next »</a>
|
||||
</li>
|
||||
[% END %]
|
||||
</ul>
|
||||
</div>
|
||||
[% END %]
|
||||
|
||||
</div>
|
||||
|
||||
[% END %]
|
||||
|
||||
[% IF searched_numbers && ! numbers %]
|
||||
<div class="p1">
|
||||
No numbers found in the database.
|
||||
</div>
|
||||
[% END %]
|
||||
|
Loading…
Reference in new issue