From d04e30fbf7c74faf746c866e73ab92d76b172226 Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Fri, 10 Mar 2017 11:42:24 -0800 Subject: [PATCH] fix dangling RADIUS attributes on upgrade (and prevent new ones from showing up), RT#75116 --- FS/FS/Upgrade.pm | 1 + FS/FS/radius_attr.pm | 17 ++++++++++++++++- FS/FS/radius_group.pm | 13 +++++++++++-- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/FS/FS/Upgrade.pm b/FS/FS/Upgrade.pm index 8a3e83c84..0a083dbae 100644 --- a/FS/FS/Upgrade.pm +++ b/FS/FS/Upgrade.pm @@ -570,6 +570,7 @@ sub upgrade_schema_data { 'cust_msg' => [], 'cust_bill_pay_batch' => [], 'cust_event_fee' => [], + 'radius_attr' => [], #update records referencing removed things with their FKs 'cust_pkg' => [], ; diff --git a/FS/FS/radius_attr.pm b/FS/FS/radius_attr.pm index 16d3f62a3..1b7df2ee4 100644 --- a/FS/FS/radius_attr.pm +++ b/FS/FS/radius_attr.pm @@ -3,7 +3,7 @@ use base qw( FS::Record ); use strict; use vars qw( $noexport_hack ); -use FS::Record qw( qsearch ); #qsearchs ); +use FS::Record qw( qsearch dbh ); $noexport_hack = 0; @@ -202,6 +202,21 @@ sub ops { =back +=cut + +sub _upgrade_schema { + my ($class, %opts) = @_; + + my $sql = ' + DELETE FROM radius_attr WHERE NOT EXISTS + ( SELECT 1 FROM radius_group WHERE radius_group.groupnum = radius_attr.groupnum ) + '; + + my $sth = dbh->prepare($sql) or die dbh->errstr; + $sth->execute or die $sth->errstr; + ''; +} + =head1 BUGS =head1 SEE ALSO diff --git a/FS/FS/radius_group.pm b/FS/FS/radius_group.pm index f1a4efe7f..21ce25f37 100644 --- a/FS/FS/radius_group.pm +++ b/FS/FS/radius_group.pm @@ -1,8 +1,8 @@ package FS::radius_group; +use base qw( FS::o2m_Common FS::Record ); use strict; -use base qw( FS::o2m_Common FS::Record ); -use FS::Record qw( qsearch qsearchs dbh ); +use FS::Record qw( qsearch dbh ); use FS::radius_attr; =head1 NAME @@ -125,6 +125,15 @@ sub delete { return $error; } } + + foreach my $radius_attr ( $self->radius_attr ) { + $error = $radius_attr->delete; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + } + dbh->commit; ''; } -- 2.11.0