From 9f2280fbce022ab9bcfc46fe94483730b0aeb0f8 Mon Sep 17 00:00:00 2001 From: levinse Date: Tue, 21 Jun 2011 01:08:07 +0000 Subject: re-write RADIUS groups, RT13274 --- FS/FS/radius_usergroup.pm | 54 +++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 45 insertions(+), 9 deletions(-) (limited to 'FS/FS/radius_usergroup.pm') diff --git a/FS/FS/radius_usergroup.pm b/FS/FS/radius_usergroup.pm index 9bba057..2de1423 100644 --- a/FS/FS/radius_usergroup.pm +++ b/FS/FS/radius_usergroup.pm @@ -4,6 +4,7 @@ use strict; use vars qw( @ISA ); use FS::Record qw( qsearch qsearchs ); use FS::svc_acct; +use FS::radius_group; @ISA = qw(FS::Record); @@ -29,8 +30,8 @@ FS::radius_usergroup - Object methods for radius_usergroup records =head1 DESCRIPTION An FS::radius_usergroup object links an account (see L) with a -RADIUS group. FS::radius_usergroup inherits from FS::Record. The following -fields are currently supported: +RADIUS group (see L). FS::radius_usergroup inherits from +FS::Record. The following fields are currently supported: =over 4 @@ -38,7 +39,7 @@ fields are currently supported: =item svcnum - Account (see L). -=item groupname - group name +=item groupnum - RADIUS group (see L). =back @@ -96,10 +97,11 @@ and replace methods. sub check { my $self = shift; + die "radius_usergroup.groupname is deprecated" if $self->groupname; + $self->ut_numbern('usergroupnum') - || $self->ut_number('svcnum') || $self->ut_foreign_key('svcnum','svc_acct','svcnum') - || $self->ut_text('groupname') + || $self->ut_foreign_key('groupnum','radius_group','groupnum') || $self->SUPER::check ; } @@ -115,15 +117,49 @@ sub svc_acct { qsearchs('svc_acct', { svcnum => $self->svcnum } ); } -=back +=item radius_group + +Returns the RADIUS group associated with this record (see L). + +=cut -=head1 BUGS +sub radius_group { + my $self = shift; + qsearchs('radius_group', { 'groupnum' => $self->groupnum } ); +} -Don't let 'em get you down. +sub _upgrade_data { #class method + my ($class, %opts) = @_; + + my %group_cache = map { $_->groupname => $_->groupnum } + qsearch('radius_group', {}); + + my @radius_usergroup = qsearch('radius_usergroup', {} ); + my $error = ''; + foreach my $rug ( @radius_usergroup ) { + my $groupname = $rug->groupname; + next unless $groupname; + unless(defined($group_cache{$groupname})) { + my $g = new FS::radius_group { + 'groupname' => $groupname, + 'description' => $groupname, + }; + $error = $g->insert; + die $error if $error; + $group_cache{$groupname} = $g->groupnum; + } + $rug->groupnum($group_cache{$groupname}); + $rug->groupname(''); + $error = $rug->replace; + die $error if $error; + } +} + +=back =head1 SEE ALSO -L, L, schema.html from the base documentation. +L, L, L, schema.html from the base documentation. =cut -- cgit v1.1