X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fsvc_acct.pm;h=37c55d67cdfba4c792ee68e4adc411c71d0103f2;hb=1e1a0a1a7945cae26175e3afe25e61ec6114c48e;hp=f12eca174762f46acdca240e93164e611314cbde;hpb=c9ef2216d83c0be354056a5f13428c898c0ede2c;p=freeside.git diff --git a/FS/FS/svc_acct.pm b/FS/FS/svc_acct.pm index f12eca174..37c55d67c 100644 --- a/FS/FS/svc_acct.pm +++ b/FS/FS/svc_acct.pm @@ -43,6 +43,7 @@ use FS::svc_pbx; use FS::raddb; use FS::queue; use FS::radius_usergroup; +use FS::radius_group; use FS::export_svc; use FS::part_export; use FS::svc_forward; @@ -335,7 +336,7 @@ sub table_info { }, 'usergroup' => { label => 'RADIUS groups', - type => 'radius_usergroup_selector', + type => 'select-radius_group.html', disable_inventory => 1, disable_select => 1, }, @@ -709,10 +710,10 @@ sub insert { } if ( $self->usergroup ) { - foreach my $groupname ( @{$self->usergroup} ) { + foreach my $groupnum ( @{$self->usergroup} ) { my $radius_usergroup = new FS::radius_usergroup ( { svcnum => $self->svcnum, - groupname => $groupname, + groupnum => $groupnum, } ); my $error = $radius_usergroup->insert; if ( $error ) { @@ -992,6 +993,10 @@ sub replace { } + return "can't change username" + if $old->username ne $new->username + && $conf->exists('svc_acct-no_edit_username'); + #change homdir when we change username $new->setfield('dir', '') if $old->username ne $new->username; @@ -1010,10 +1015,10 @@ sub replace { $error = $new->check; return $error if $error; - $old->usergroup( [ $old->radius_groups ] ); + $old->usergroup( [ $old->radius_groups('NUMBERS') ] ); if ( $DEBUG ) { warn $old->email. " old groups: ". join(' ',@{$old->usergroup}). "\n"; - warn $new->email. "new groups: ". join(' ',@{$new->usergroup}). "\n"; + warn $new->email. " new groups: ". join(' ',@{$new->usergroup}). "\n"; } if ( $new->usergroup ) { #(sorta) false laziness with FS::part_export::sqlradius::_export_replace @@ -1025,7 +1030,7 @@ sub replace { } my $radius_usergroup = qsearchs('radius_usergroup', { svcnum => $old->svcnum, - groupname => $oldgroup, + groupnum => $oldgroup, } ); my $error = $radius_usergroup->delete; if ( $error ) { @@ -1037,7 +1042,7 @@ sub replace { foreach my $newgroup ( @newgroups ) { my $radius_usergroup = new FS::radius_usergroup ( { svcnum => $new->svcnum, - groupname => $newgroup, + groupnum => $newgroup, } ); my $error = $radius_usergroup->insert; if ( $error ) { @@ -2222,20 +2227,19 @@ sub _op_overlimit { my $cust_pkg = $self->cust_svc->cust_pkg; - my $conf_overlimit = + my @conf_overlimit = $cust_pkg ? $conf->config('overlimit_groups', $cust_pkg->cust_main->agentnum ) : $conf->config('overlimit_groups'); foreach my $part_export ( $self->cust_svc->part_svc->part_export ) { - my $groups = $conf_overlimit || $part_export->option('overlimit_groups'); - next unless $groups; - - my $gref = &{ $self->_fieldhandlers->{'usergroup'} }( $self, $groups ); + my @groups = scalar(@conf_overlimit) ? @conf_overlimit + : split(' ',$part_export->option('overlimit_groups')); + next unless scalar(@groups); my $other = new FS::svc_acct $self->hashref; - $other->usergroup( $gref ); + $other->usergroup(\@groups); my($new,$old); if ($action eq 'suspend') { @@ -2558,10 +2562,26 @@ sub radius_groups { unless ref($self->usergroup) eq 'ARRAY'; #when provisioning records, export callback runs in svc_Common.pm before #radius_usergroup records can be inserted... - @{$self->usergroup}; + my $groups = join(',',@{$self->usergroup}); + my @groups; + return @groups unless length($groups); + @groups = qsearch({ 'table' => 'radius_group', + 'extra_sql' => "where groupnum in ($groups)", + }); + map { $_->groupname } @groups; } else { - map { $_->groupname } - qsearch('radius_usergroup', { 'svcnum' => $self->svcnum } ); + my $format = shift || ''; + my @groups = qsearch({ 'table' => 'radius_usergroup', + 'addl_from' => 'left join radius_group using (groupnum)', + 'select' => 'radius_group.*', + 'hashref' => { 'svcnum' => $self->svcnum }, + }); + + # this is to preserve various legacy behaviour / avoid re-writing other code + return map { $_->groupnum } @groups if $format eq 'NUMBERS'; + return map { $_->description . " (" . $_->groupname . ")" } @groups + if $format eq 'COMBINED'; + map { $_->groupname } @groups; } } @@ -2913,7 +2933,7 @@ sub search { #agentnum if ( $params->{'agentnum'} =~ /^(\d+)$/ and $1 ) { - push @where, "agentnum = $1"; + push @where, "cust_main.agentnum = $1"; } #custnum @@ -3102,56 +3122,6 @@ sub append_fuzzyfiles { } - -=item radius_usergroup_selector GROUPS_ARRAYREF [ SELECTNAME ] - -=cut - -sub radius_usergroup_selector { - my $sel_groups = shift; - my %sel_groups = map { $_=>1 } @$sel_groups; - - my $selectname = shift || 'radius_usergroup'; - - my $dbh = dbh; - my $sth = $dbh->prepare( - 'SELECT DISTINCT(groupname) FROM radius_usergroup ORDER BY groupname' - ) or die $dbh->errstr; - $sth->execute() or die $sth->errstr; - my @all_groups = map { $_->[0] } @{$sth->fetchall_arrayref}; - - my $html = < - function ${selectname}_doadd(object) { - var myvalue = object.${selectname}_add.value; - var optionName = new Option(myvalue,myvalue,false,true); - var length = object.$selectname.length; - object.$selectname.options[length] = optionName; - object.${selectname}_add.value = ""; - } - - '; - - $html .= qq!
!. - qq!!; - - $html; -} - =item reached_threshold Performs some activities when svc_acct thresholds (such as number of seconds @@ -3241,9 +3211,6 @@ The suspend, unsuspend and cancel methods update the database, but not the current object. This is probably a bug as it's unexpected and counterintuitive. -radius_usergroup_selector? putting web ui components in here? they should -probably live somewhere else... - insertion of RADIUS group stuff in insert could be done with child_objects now (would probably clean up export of them too)