[freeside-commits] branch master updated. a977d27ac2e9d8f8e1adbbdcfc3547bc378dde63
Mark Wells
mark at 420.am
Fri Oct 5 13:25:49 PDT 2012
The branch, master has been updated
via a977d27ac2e9d8f8e1adbbdcfc3547bc378dde63 (commit)
via 8a8c3fa428fa6a129bef30ceab7b1b02d4b19ac7 (commit)
from 0af38652da3b3be7da2d35b048285ef6f2194e1a (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit a977d27ac2e9d8f8e1adbbdcfc3547bc378dde63
Merge: 8a8c3fa 0af3865
Author: Mark Wells <mark at freeside.biz>
Date: Fri Oct 5 13:23:58 2012 -0700
Merge branch 'master' of git.freeside.biz:/home/git/freeside
commit 8a8c3fa428fa6a129bef30ceab7b1b02d4b19ac7
Author: Mark Wells <mark at freeside.biz>
Date: Fri Oct 5 12:11:12 2012 -0700
adjust DMA export, #18456
diff --git a/FS/FS/part_export/dma_radiusmanager.pm b/FS/FS/part_export/dma_radiusmanager.pm
index 6e56c99..d46a996 100644
--- a/FS/FS/part_export/dma_radiusmanager.pm
+++ b/FS/FS/part_export/dma_radiusmanager.pm
@@ -18,9 +18,8 @@ tie %options, 'Tie::IxHash',
'username' => { label=>'Database username' },
'password' => { label=>'Database password' },
'manager' => { label=>'Manager name' },
- 'groupid' => { label=>'Group ID', default=>'1' },
- 'service_prefix' => { label=>'Service name prefix' },
- 'nasnames' => { label=>'NAS IDs/addresses' },
+ 'template_name' => { label=>'Template service name' },
+ 'service_prefix' => { label=>'Service name prefix' },
'debug' => { label=>'Enable debugging', type=>'checkbox' },
;
@@ -235,6 +234,14 @@ not, create one. Then return its srvid.
sub export_part_svc {
my ($self, $part_svc, $dbh) = @_;
+ # if $dbh exists, use the existing transaction
+ # otherwise create our own and commit when finished
+ my $commit = 0;
+ if (!$dbh) {
+ $dbh = $self->connect;
+ $commit = 1;
+ }
+
my $name = $self->option('service_prefix').$part_svc->svc;
my %params = (
@@ -242,19 +249,22 @@ sub export_part_svc {
'enableservice' => 1,
'nextsrvid' => -1,
'dailynextsrvid' => -1,
+ # force price-related fields to zero
+ 'unitprice' => 0,
+ 'unitpriceadd' => 0,
+ 'unitpricetax' => 0,
+ 'unitpriceaddtax' => 0,
);
my @fixed_groups;
# use speed settings from fixed usergroups configured on this part_svc
if ( my $psc = $part_svc->part_svc_column('usergroup') ) {
- if ( $psc->columnflag eq 'F' ) {
- # each part_svc really should only have one fixed group with non-null
- # speed settings, but go by priority order for consistency
- @fixed_groups =
- sort { $a->priority <=> $b->priority }
- grep { $_ }
- map { FS::radius_group->by_key($_) }
- split(/\s*,\s*/, $psc->columnvalue);
- }
+ # each part_svc really should only have one fixed group with non-null
+ # speed settings, but go by priority order for consistency
+ @fixed_groups =
+ sort { $a->priority <=> $b->priority }
+ grep { $_ }
+ map { FS::radius_group->by_key($_) }
+ split(/\s*,\s*/, $psc->columnvalue);
} # otherwise there are no fixed groups, so leave speed empty
foreach (qw(down up)) {
@@ -275,76 +285,71 @@ sub export_part_svc {
$sth->execute($name) or die $dbh->errstr;
if ( $sth->rows > 1 ) {
die "Multiple services with name '$name' found in Radius Manager.\n";
- } elsif ( $sth->rows == 1 ) {
- my $row = $sth->fetchrow_arrayref;
- my $srvid = $row->[0];
- warn "rm_services: updating srvid#$srvid\n" if $DEBUG;
- $sth = $dbh->prepare(
- 'UPDATE rm_services SET '.join(', ', map {"$_ = ?"} keys %params) .
- ' WHERE srvid = ?'
- );
- $sth->execute(values(%params), $srvid) or die $dbh->errstr;
- return $srvid;
- } else { # $sth->rows == 0
- # create a new one
- # but first... get the next available srvid
+
+ } elsif ( $sth->rows == 0 ) {
+ # leave this blank to disable creating new service defs
+ my $template_name = $self->option('template_name');
+
+ die "Can't create a new service profile--no template service specified.\n"
+ unless $template_name;
+
+ warn "rm_services: fetching template '$template_name'\n" if $DEBUG;
+ $sth = $dbh->prepare('SELECT * FROM rm_services WHERE srvname = ? LIMIT 1');
+ $sth->execute($template_name);
+ die "Can't create a new service profile--template service ".
+ "'$template_name' not found.\n" unless $sth->rows == 1;
+ my $template = $sth->fetchrow_hashref;
+ %params = (%$template, %params);
+
+ # get the next available srvid
$sth = $dbh->prepare('SELECT MAX(srvid) FROM rm_services');
$sth->execute or die $dbh->errstr;
- my $srvid = 1; # just in case you somehow have nothing in your database
+ my $srvid;
if ( $sth->rows ) {
$srvid = $sth->fetchrow_arrayref->[0] + 1;
}
$params{'srvid'} = $srvid;
- # NOW create a new one
+
+ # create a new one based on the template
warn "rm_services: inserting '$name' as srvid#$srvid\n" if $DEBUG;
$sth = $dbh->prepare(
'INSERT INTO rm_services ('.join(', ', keys %params).
') VALUES ('.join(', ', map {'?'} keys %params).')'
);
$sth->execute(values(%params)) or die $dbh->errstr;
- # also link it to our manager name
+ # also link it to all the managers allowed on the template service
warn "rm_services: linking to manager\n" if $DEBUG;
$sth = $dbh->prepare(
- 'INSERT INTO rm_allowedmanagers (srvid, managername) VALUES (?, ?)'
+ 'INSERT INTO rm_allowedmanagers (srvid, managername) '.
+ 'SELECT ?, managername FROM rm_allowedmanagers WHERE srvid = ?'
);
- $sth->execute($srvid, $self->option('manager')) or die $dbh->errstr;
- # and allow it on our NAS
+ $sth->execute($srvid, $template->{srvid}) or die $dbh->errstr;
+ # and the same for NASes
+ warn "rm_services: linking to nas\n" if $DEBUG;
$sth = $dbh->prepare(
- 'INSERT INTO rm_allowednases (srvid, nasid) VALUES (?, ?)'
+ 'INSERT INTO rm_allowednases (srvid, nasid) '.
+ 'SELECT ?, nasid FROM rm_allowednases WHERE srvid = ?'
);
- foreach my $nasid ($self->nas_ids($dbh)) {
- warn "rm_services: linking to nasid#$nasid\n" if $DEBUG;
- $sth->execute($srvid, $nasid) or die $dbh->errstr;
- }
- return $srvid;
- }
-}
+ $sth->execute($srvid, $template->{srvid}) or die $dbh->errstr;
-=item nas_ids DBH
+ $dbh->commit if $commit;
+ return $srvid;
-Convert the 'nasnames option into a list of real NAS ids.
+ } else { # $sth->rows == 1, it already exists
-=cut
-
-sub nas_ids {
- my $self = shift;
- my $dbh = shift;
+ my $row = $sth->fetchrow_arrayref;
+ my $srvid = $row->[0];
+ warn "rm_services: updating srvid#$srvid\n" if $DEBUG;
+ $sth = $dbh->prepare(
+ 'UPDATE rm_services SET '.join(', ', map {"$_ = ?"} keys %params) .
+ ' WHERE srvid = ?'
+ );
+ $sth->execute(values(%params), $srvid) or die $dbh->errstr;
- my @nasnames = split(/\s*,\s*/, $self->option('nasnames'));
- return unless @nasnames;
- # pass these through unchanged
- my @ids = grep { /^\d+$/ } @nasnames;
- @nasnames = grep { not /^\d+$/ } @nasnames;
- if ( @nasnames ) {
- my $in_nasnames = join(',', map {$dbh->quote($_)} @nasnames);
+ $dbh->commit if $commit;
+ return $srvid;
- my $sth = $dbh->prepare("SELECT id FROM nas WHERE nasname IN ($in_nasnames)");
- $sth->execute or die $dbh->errstr;
- my $rows = $sth->fetchall_arrayref;
- push @ids, $_->[0] foreach @$rows;
}
-
- return @ids;
}
1;
-----------------------------------------------------------------------
Summary of changes:
FS/FS/part_export/dma_radiusmanager.pm | 123 +++++++++++++++++---------------
1 files changed, 64 insertions(+), 59 deletions(-)
More information about the freeside-commits
mailing list