summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormark <mark>2012-02-16 23:50:58 +0000
committermark <mark>2012-02-16 23:50:58 +0000
commit0f729d9a3de8cff6cb0f4492b7607fea31e8551c (patch)
tree7c71a2e160bff1fba8d20ae50c2d46902d375910
parent08b3d5f072bc2852a687b8fe9d6819fea8440a54 (diff)
delete RADIUS groups, #16491
-rw-r--r--FS/FS/radius_group.pm49
-rw-r--r--httemplate/edit/radius_group.html14
-rwxr-xr-xhttemplate/misc/delete-radius_group.html16
3 files changed, 74 insertions, 5 deletions
diff --git a/FS/FS/radius_group.pm b/FS/FS/radius_group.pm
index 8adf923..37aa0f3 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 164f0a5..0255611 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 0000000..217b105
--- /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;
+
+</%init>