[freeside-commits] freeside/FS/FS/part_export broadband_nas.pm, NONE, 1.1.2.2
Mark Wells
mark at wavetail.420.am
Wed Dec 28 15:56:21 PST 2011
Update of /home/cvs/cvsroot/freeside/FS/FS/part_export
In directory wavetail.420.am:/tmp/cvs-serv6000/FS/FS/part_export
Added Files:
Tag: FREESIDE_2_3_BRANCH
broadband_nas.pm
Log Message:
broadband_nas export, #15284
--- NEW FILE: broadband_nas.pm ---
package FS::part_export::broadband_nas;
use strict;
use vars qw(%info $DEBUG);
use base 'FS::part_export';
use FS::Record qw(qsearch qsearchs);
use FS::nas;
use FS::export_nas;
use FS::svc_broadband;
use FS::part_export::sqlradius;
use Tie::IxHash;
$DEBUG = 0;
my $me = '['.__PACKAGE__.']';
tie my %options, 'Tie::IxHash',
'1' => { type => 'title', label => 'Defaults' },
default_shortname => { label => 'Short name' },
default_secret => { label => 'Shared secret' },
default_type => { label => 'Type' },
default_ports => { label => 'Ports' },
default_server => { label => 'Virtual server' },
default_community => { label => 'Community' },
'2' => { type => 'title', label => 'Export to' },
# default export_nas entries will be inserted at runtime
;
FS::UID->install_callback(
sub {
#creating new options based on records in a table,
#has to be done after initialization
foreach ( FS::part_export::sqlradius->all_sqlradius ) {
my $name = 'exportnum' . $_->exportnum;
$options{$name} =
{ type => 'checkbox', label => $_->exportnum . ': ' . $_->label };
}
}
);
%info = (
'svc' => 'svc_broadband',
'desc' => 'Create a NAS entry in Freeside',
'options' => \%options,
'weight' => 10,
'notes' => <<'END'
<p>Create an entry in the NAS (RADIUS client) table, inheriting the IP
address and description of the broadband service. This can be used
with 'sqlradius' or 'broadband_sqlradius' exports to maintain entries
in the client table on a RADIUS server.</p>
<p>Most broadband configurations should not use this, even if they use
RADIUS for access control.</p>
END
);
=item export_insert NEWSVC
=item export_replace NEWSVC OLDSVC
NEWSVC can contain pseudo-field entries for fields in nas. Those changes
will be applied to the attached NAS record.
=cut
sub export_insert {
my $self = shift;
my $svc_broadband = shift;
my %hash = map { $_ => $svc_broadband->get($_) } FS::nas->fields;
my $nas = $self->default_nas(
%hash,
'nasname' => $svc_broadband->ip_addr,
'description' => $svc_broadband->description,
'svcnum' => $svc_broadband->svcnum,
);
my $error =
$nas->insert()
|| $nas->process_m2m('link_table' => 'export_nas',
'target_table' => 'part_export',
'params' => { $self->options });
die $error if $error;
return;
}
sub export_delete {
my $self = shift;
my $svc_broadband = shift;
my $svcnum = $svc_broadband->svcnum;
my $nas = qsearchs('nas', { 'svcnum' => $svcnum });
if ( !$nas ) {
# we were going to delete it anyway...
warn "linked NAS with svcnum $svcnum not found for deletion\n";
return;
}
my $error = $nas->delete; # will clean up export_nas records
die $error if $error;
return;
}
sub export_replace {
my $self = shift;
my ($new_svc, $old_svc) = (shift, shift);
my $svcnum = $new_svc->svcnum;
my $nas = qsearchs('nas', { 'svcnum' => $svcnum });
if ( !$nas ) {
warn "linked nas with svcnum $svcnum not found for update, creating new\n";
# then we should insert it
# (this happens if the nas table is wiped out, or if the broadband_nas
# export is newly applied to an existing svcpart)
return $self->export_insert($new_svc);
}
my %hash = $new_svc->hash;
foreach (FS::nas->fields) {
$nas->set($_, $hash{$_}) if exists($hash{$_});
}
$nas->nasname($new_svc->ip_addr); # this must always be true
my $error = $nas->replace;
die $error if $error;
return;
}
=item default_nas HASH
Returns a new L<FS::nas> object containing the default values, plus anything
in HASH.
=cut
sub default_nas {
my $self = shift;
FS::nas->new({
map( { $_ => $self->option("default_$_") }
qw(shortname type ports secret server community)
),
@_
});
}
1;
More information about the freeside-commits
mailing list