1 package FS::svc_Radius_Mixin;
4 use base qw(FS::m2m_Common FS::svc_Common);
5 use FS::Record qw(qsearch);
7 use FS::radius_usergroup;
12 FS::svc_Radius_Mixin - partial base class for services with RADIUS groups
23 $self->SUPER::insert(@_)
24 || $self->process_m2m(
25 'link_table' => 'radius_usergroup',
26 'target_table' => 'radius_group',
27 'params' => $self->usergroup,
34 $old = $new->replace_old if !defined($old);
36 $old->usergroup; # make sure this is cached for exports
38 'link_table' => 'radius_usergroup',
39 'target_table' => 'radius_group',
40 'params' => $new->usergroup,
41 ) || $new->SUPER::replace($old, @_);
46 $self->SUPER::delete(@_)
47 || $self->process_m2m(
48 'link_table' => 'radius_usergroup',
49 'target_table' => 'radius_group',
57 if ( defined $value ) {
59 return $self->set('usergroup', $value);
62 return $self->set('usergroup', [ split(/\s*,\s*/, $value) ]);
65 $self->get('usergroup') ||
66 # if no argument is passed and usergroup is not set already,
67 # fetch this service's group assignments
68 $self->set('usergroup',
69 [ map { $_->groupnum }
70 qsearch('radius_usergroup', { svcnum => $self->svcnum }) ]
76 'usergroup' => \&usergroup
80 =item radius_groups METHOD
82 Returns a list of RADIUS groups for this service (see L<FS::radius_usergroup>).
83 METHOD is the field to return, and can be any method on L<FS::radius_group>.
84 Useful values for METHOD include 'groupnum', 'groupname', and
85 'long_description'. Defaults to 'groupname' for historical reasons.
91 my $method = shift || 'groupname';
92 my $groups = join(',', @{$self->usergroup}) || return ();
93 my @groups = qsearch({'table' => 'radius_group',
94 'extra_sql' => "where groupnum in ($groups)"});
95 return map {$_->$method} @groups;