%
my $conf = new FS::Conf;
my @shells = $conf->config('shells');
my($svcnum, $pkgnum, $svcpart, $part_svc, $svc_acct, @groups);
if ( $cgi->param('error') ) {
$svc_acct = new FS::svc_acct ( {
map { $_, scalar($cgi->param($_)) } fields('svc_acct')
} );
$svcnum = $svc_acct->svcnum;
$pkgnum = $cgi->param('pkgnum');
$svcpart = $cgi->param('svcpart');
$part_svc = qsearchs( 'part_svc', { 'svcpart' => $svcpart } );
die "No part_svc entry for svcpart $svcpart!" unless $part_svc;
@groups = $cgi->param('radius_usergroup');
} else {
my($query) = $cgi->keywords;
if ( $query =~ /^(\d+)$/ ) { #editing
$svcnum=$1;
$svc_acct=qsearchs('svc_acct',{'svcnum'=>$svcnum})
or die "Unknown (svc_acct) svcnum!";
my($cust_svc)=qsearchs('cust_svc',{'svcnum'=>$svcnum})
or die "Unknown (cust_svc) svcnum!";
$pkgnum=$cust_svc->pkgnum;
$svcpart=$cust_svc->svcpart;
$part_svc = qsearchs( 'part_svc', { 'svcpart' => $svcpart } );
die "No part_svc entry for svcpart $svcpart!" unless $part_svc;
@groups = $svc_acct->radius_groups;
} else { #adding
foreach $_ (split(/-/,$query)) {
$pkgnum=$1 if /^pkgnum(\d+)$/;
$svcpart=$1 if /^svcpart(\d+)$/;
}
$part_svc = qsearchs( 'part_svc', { 'svcpart' => $svcpart } );
die "No part_svc entry for svcpart $svcpart!" unless $part_svc;
$svc_acct = new FS::svc_acct({svcpart => $svcpart});
$svcnum='';
}
}
my( $cust_pkg, $cust_main ) = ( '', '' );
if ( $pkgnum ) {
$cust_pkg = qsearchs('cust_pkg', { 'pkgnum' => $pkgnum } );
$cust_main = $cust_pkg->cust_main;
}
unless ( $svcnum || $cgi->param('error') ) { #adding
#set gecos
if ($cust_main) {
unless ( $part_svc->part_svc_column('uid')->columnflag eq 'F' ) {
$svc_acct->setfield('finger',
$cust_main->getfield('first') . " " . $cust_main->getfield('last')
);
}
}
#set fixed and default fields from part_svc
foreach my $part_svc_column (
grep { $_->columnflag } $part_svc->all_part_svc_column
) {
if ( $part_svc_column->columnname eq 'usergroup' ) {
@groups = split(',', $part_svc_column->columnvalue);
} else {
$svc_acct->setfield( $part_svc_column->columnname,
$part_svc_column->columnvalue,
);
}
}
}
#fixed radius groups always override & display
if ( $part_svc->part_svc_column('usergroup')->columnflag eq 'F' ) {
@groups = split(',', $part_svc->part_svc_column('usergroup')->columnvalue);
}
my $action = $svcnum ? 'Edit' : 'Add';
my $svc = $part_svc->getfield('svc');
my $otaker = getotaker;
my $username = $svc_acct->username;
my $password;
if ( $svc_acct->_password ) {
if ( $conf->exists('showpasswords') || ! $svcnum ) {
$password = $svc_acct->_password;
} else {
$password = "*HIDDEN*";
}
} else {
$password = '';
}
my $ulen =
$conf->exists('usernamemax')
? $conf->config('usernamemax')
: dbdef->table('svc_acct')->column('username')->length;
my $ulen2 = $ulen+2;
my $pmax = $conf->config('passwordmax') || 8;
my $pmax2 = $pmax+2;
my $p1 = popurl(1);
%>
<%= include("/elements/header.html","$action $svc account") %>
<% if ( $cgi->param('error') ) { %>
Error: <%= $cgi->param('error') %>
<% } %>
<% if ( $cust_main ) { %>
<%= include( '/elements/small_custview.html', $cust_main, '', 1 ) %>
<% } %>