Deletes this record from the database. If there is an error, returns the
error, otherwise returns false.
+=cut
+
sub delete {
my $self = shift;
- return 'Block must be deallocated before deletion'
- if $self->router;
-
- $self->SUPER::delete;
+ return 'Block must be deallocated and have no services before deletion'
+ if $self->router || $self->svc_broadband;
+
+ local $SIG{HUP} = 'IGNORE';
+ local $SIG{INT} = 'IGNORE';
+ local $SIG{QUIT} = 'IGNORE';
+ local $SIG{TERM} = 'IGNORE';
+ local $SIG{TSTP} = 'IGNORE';
+ local $SIG{PIPE} = 'IGNORE';
+
+ my $oldAutoCommit = $FS::UID::AutoCommit;
+ local $FS::UID::AutoCommit = 0;
+ my $dbh = dbh;
+
+ my $error = $self->SUPER::delete;
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+
+ $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+ '';
}
+
=item replace OLD_RECORD
Replaces OLD_RECORD with this one in the database. If there is an error,
use strict;
use vars qw( @ISA );
-use FS::Record qw( qsearchs qsearch );
+use FS::Record qw( qsearchs qsearch dbh );
use FS::addr_block;
@ISA = qw( FS::Record FS::m2m_Common );
$self->SUPER::check;
}
+=item delete
+
+Deletes this router if and only if no address blocks (see L<FS::addr_block>)
+are currently allocated to it.
+
+=cut
+
+sub delete {
+ my $self = shift;
+
+ return 'Router has address blocks allocated to it' if $self->addr_block;
+
+ local $SIG{HUP} = 'IGNORE';
+ local $SIG{INT} = 'IGNORE';
+ local $SIG{QUIT} = 'IGNORE';
+ local $SIG{TERM} = 'IGNORE';
+ local $SIG{TSTP} = 'IGNORE';
+ local $SIG{PIPE} = 'IGNORE';
+
+ my $oldAutoCommit = $FS::UID::AutoCommit;
+ local $FS::UID::AutoCommit = 0;
+ my $dbh = dbh;
+
+ my $error = $self->SUPER::delete;
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+
+ $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+ '';
+}
+
=item addr_block
Returns a list of FS::addr_block objects (address blocks) associated
=back
-=head1 BUGS
-
=head1 SEE ALSO
FS::svc_broadband, FS::router, FS::addr_block, FS::part_svc,
'Action(s)',
'',
'',
+ '',
],
'fields' => [ 'NetAddr',
sub { my $block = shift;
$allocate_text,
sub { shift->router ? '' : '<FONT SIZE="-2">(split)</FONT>' },
sub { '<FONT SIZE="-2">('. (shift->manual_flag ? 'allow' : 'prevent'). ' automatic ip assignment)</FONT>' },
+ sub {
+ my $block = shift;
+ if(!$block->router && scalar($block->svc_broadband) == 0) {
+ return '<FONT SIZE="-2">(delete)</FONT>';
+ }
+ '';
+ },
],
'links' => [ '',
'',
[ 'javascript:void(0)', '' ],
$split_link,
$autoassign_link,
+ sub {
+ my $block = shift;
+ if(!$block->router && scalar($block->svc_broadband) == 0) {
+ [ "${p}misc/delete-addr_block.html?", 'blocknum' ];
+ }
+ },
],
'link_onclicks' => [ '',
'',
$allocate_link,
'',
+ '',
],
'cell_styles' => [ '',
'',
'border-right:none;',
'border-left:none;',
+ '',
],
'agent_virt' => 1,
'agent_null_right' => 'Broadband global configuration',
[ "$url;blocknum=", 'blocknum' ];
};
+my $delete_link = sub {
+};
+
</%init>
--- /dev/null
+% if ( $error ) {
+% errorpage($error);
+% } else {
+<% $cgi->redirect("${p}browse/router.cgi") %>
+% }
+<%init>
+
+die "access denied"
+ unless $FS::CurrentUser::CurrentUser->access_right('Broadband configuration')
+ || $FS::CurrentUser::CurrentUser->access_right('Broadband global configuration');
+
+my($query) = $cgi->keywords;
+$query =~ /^(\d+)$/ || die "Illegal routernum";
+my $routernum = $1;
+
+my $router = qsearchs('router',{'routernum'=>$routernum});
+my $error = $router->delete;
+
+</%init>