From 0f729d9a3de8cff6cb0f4492b7607fea31e8551c Mon Sep 17 00:00:00 2001 From: mark Date: Thu, 16 Feb 2012 23:50:58 +0000 Subject: [PATCH] delete RADIUS groups, #16491 --- FS/FS/radius_group.pm | 49 +++++++++++++++++++++++++++++--- httemplate/edit/radius_group.html | 14 ++++++++- httemplate/misc/delete-radius_group.html | 16 +++++++++++ 3 files changed, 74 insertions(+), 5 deletions(-) create mode 100755 httemplate/misc/delete-radius_group.html diff --git a/FS/FS/radius_group.pm b/FS/FS/radius_group.pm index 8adf9231b..37aa0f37b 100644 --- a/FS/FS/radius_group.pm +++ b/FS/FS/radius_group.pm @@ -2,7 +2,7 @@ package FS::radius_group; use strict; use base qw( FS::o2m_Common FS::Record ); -use FS::Record qw( qsearch qsearchs ); +use FS::Record qw( qsearch qsearchs dbh ); use FS::radius_attr; =head1 NAME @@ -82,9 +82,50 @@ Delete this record from the database. =cut -# I'd delete any linked attributes here but we don't really support group -# deletion. We would also have to delete linked records from -# radius_usergroup and part_svc_column... +sub delete { + # okay, I guess we support it now + my $self = shift; + 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 $groupnum = $self->groupnum; + my $error = $self->process_o2m( + 'table' => 'radius_usergroup', + 'num_col' => 'groupnum', + 'fields' => ['groupnum'], # just delete them + 'params' => {}, + ) || $self->SUPER::delete(@_); + + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + + foreach my $part_svc_column ( + qsearch('part_svc_column', { columnname => 'usergroup' }) + ) { + my $new_values = join(',', + grep { $_ != $groupnum } split(',', $part_svc_column->columnvalue) + ); + next if $new_values eq $part_svc_column->columnvalue; + $part_svc_column->set(columnvalue => $new_values); + $error = $part_svc_column->replace; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + } + dbh->commit; + ''; +} =item replace OLD_RECORD diff --git a/httemplate/edit/radius_group.html b/httemplate/edit/radius_group.html index 164f0a581..025561159 100644 --- a/httemplate/edit/radius_group.html +++ b/httemplate/edit/radius_group.html @@ -8,7 +8,9 @@ 'attrnum' => 'Attribute', 'priority' => 'Priority', }, - 'viewall_dir' => 'browse', + 'menubar' => \@menubar, + 'edit_callback' => $edit_callback, + 'error_callback' => $edit_callback, 'fields' => [ { 'field' => 'groupname', 'type' => 'text', @@ -40,6 +42,16 @@ die "access denied" unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); +my @menubar = ('View all RADIUS Groups' => $p.'browse/radius_group.html'); + +my $edit_callback = sub { + my ($cgi, $object) = @_; + if ( $object->groupnum ) { + my $link = $p.'misc/delete-radius_group.html?'.$object->groupnum; + push @menubar, 'Delete this Group', $link; + } +}; + my $m2_error_callback = sub { # reconstruct the list my ($cgi, $object) = @_; diff --git a/httemplate/misc/delete-radius_group.html b/httemplate/misc/delete-radius_group.html new file mode 100755 index 000000000..217b1053b --- /dev/null +++ b/httemplate/misc/delete-radius_group.html @@ -0,0 +1,16 @@ +% if ( $error ) { +% errorpage($error); +% } else { +<% $cgi->redirect($p.'browse/radius_group.html') %> +% } +<%init> + +die "access denied" + unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); + +my ($query) = $cgi->keywords; +$query =~ /^(\d+)$/ or die "Illegal groupnum"; +my $group = FS::radius_group->by_key($1); +my $error = $group->delete; + + -- 2.11.0