X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpart_export.pm;h=835f5318f1b067e5e9d60ed77dc151d949937fdb;hb=e6ea57971831f25d682d97a0ba508c39b66ecd8b;hp=a43c3844ef2111d74a1989143528790a93b9b42d;hpb=92badebcb286260d7861bd09a2450eea18c4259e;p=freeside.git diff --git a/FS/FS/part_export.pm b/FS/FS/part_export.pm index a43c3844e..835f5318f 100644 --- a/FS/FS/part_export.pm +++ b/FS/FS/part_export.pm @@ -1,12 +1,15 @@ package FS::part_export; use strict; -use vars qw( @ISA ); +use vars qw( @ISA @EXPORT_OK %exports ); +use Exporter; use FS::Record qw( qsearch qsearchs dbh ); use FS::part_svc; use FS::part_export_option; +use FS::export_svc; @ISA = qw(FS::Record); +@EXPORT_OK = qw(export_info); =head1 NAME @@ -19,7 +22,7 @@ FS::part_export - Object methods for part_export records $record = new FS::part_export \%hash; $record = new FS::part_export { 'column' => 'value' }; - ($new_record, $options) = $template_recored->clone( $svcpart ); + #($new_record, $options) = $template_recored->clone( $svcpart ); $error = $record->insert( { 'option' => 'value' } ); $error = $record->insert( \%options ); @@ -40,8 +43,6 @@ fields are currently supported: =item exportnum - primary key -=item svcpart - Service definition (see L) to which this export applies - =item machine - Machine name =item exporttype - Export type @@ -67,27 +68,29 @@ points to. You can ask the object for a copy with the I method. sub table { 'part_export'; } -=item clone SVCPART - -An alternate constructor. Creates a new export by duplicating an existing -export. The given svcpart is assigned to the new export. - -Returns a list consisting of the new export object and a hashref of options. - =cut -sub clone { - my $self = shift; - my $class = ref($self); - my %hash = $self->hash; - $hash{'exportnum'} = ''; - $hash{'svcpart'} = shift; - ( $class->new( \%hash ), - { map { $_->optionname => $_->optionvalue } - qsearch('part_export_option', { 'exportnum' => $self->exportnum } ) - } - ); -} +#=item clone SVCPART +# +#An alternate constructor. Creates a new export by duplicating an existing +#export. The given svcpart is assigned to the new export. +# +#Returns a list consisting of the new export object and a hashref of options. +# +#=cut +# +#sub clone { +# my $self = shift; +# my $class = ref($self); +# my %hash = $self->hash; +# $hash{'exportnum'} = ''; +# $hash{'svcpart'} = shift; +# ( $class->new( \%hash ), +# { map { $_->optionname => $_->optionvalue } +# qsearch('part_export_option', { 'exportnum' => $self->exportnum } ) +# } +# ); +#} =item insert HASHREF @@ -173,6 +176,14 @@ sub delete { } } + foreach my $export_svc ( $self->export_svc ) { + my $error = $export_svc->delete; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + } + $dbh->commit or die $dbh->errstr if $oldAutoCommit; ''; @@ -258,13 +269,11 @@ sub check { my $error = $self->ut_numbern('exportnum') || $self->ut_domain('machine') - || $self->ut_number('svcpart') || $self->ut_alpha('exporttype') ; return $error if $error; - return "Unknown svcpart: ". $self->svcpart - unless qsearchs( 'part_svc', { 'svcpart' => $self->svcpart } ); + warn $self->machine. "!!!\n"; $self->machine =~ /^([\w\-\.]*)$/ or return "Illegal machine: ". $self->machine; @@ -273,20 +282,39 @@ sub check { $self->nodomain =~ /^(Y?)$/ or return "Illegal nodomain: ". $self->nodomain; $self->nodomain($1); + $self->deprecated(1); #BLAH + #check exporttype? ''; #no error } -=item part_svc +#=item part_svc +# +#Returns the service definition (see L) for this export. +# +#=cut +# +#sub part_svc { +# my $self = shift; +# qsearchs('part_svc', { svcpart => $self->svcpart } ); +#} -Returns the service definition (see L) for this export. +sub part_svc { + use Carp; + croak "FS::part_export::part_svc deprecated"; + #confess "FS::part_export::part_svc deprecated"; +} + +=item export_svc + +Returns a list of associated FS::export_svc records. =cut -sub part_svc { +sub export_svc { my $self = shift; - qsearchs('part_svc', { svcpart => $self->svcpart } ); + qsearch('export_svc', { 'exportnum' => $self->exportnum } ); } =item part_export_option @@ -402,10 +430,118 @@ sub _export_delete { =back +=head1 SUBROUTINES + +=over 4 + +=item export_info [ SVCDB ] + +Returns a hash reference of the exports for the given I, or if no +I is specified, for all exports. The keys of the hash are +Is and the values are again hash references containing information +on the export: + + 'desc' => 'Description', + 'options' => { + 'option' => { label=>'Option Label' }, + 'option2' => { label=>'Another label' }, + }, + 'nodomain' => 'Y', #or '' + 'notes' => 'Additional notes', + +=cut + +sub export_info { + #warn $_[0]; + return $exports{$_[0]} if @_; + #{ map { %{$exports{$_}} } keys %exports }; + my $r = { map { %{$exports{$_}} } keys %exports }; +} + +=item exporttype2svcdb EXPORTTYPE + +Returns the applicable I for an I. + +=cut + +sub exporttype2svcdb { + my $exporttype = $_[0]; + foreach my $svcdb ( keys %exports ) { + return $svcdb if grep { $exporttype eq $_ } keys %{$exports{$svcdb}}; + } + ''; +} + +%exports = ( + 'svc_acct' => { + 'sysvshell' => { + 'desc' => + 'Batch export of /etc/passwd and /etc/shadow files (Linux/SysV)', + 'options' => {}, + }, + 'bsdshell' => { + 'desc' => + 'Batch export of /etc/passwd and /etc/master.passwd files (BSD)', + 'options' => {}, + }, +# 'nis' => { +# 'desc' => +# 'Batch export of /etc/global/passwd and /etc/global/shadow for NIS ', +# 'options' => {}, +# }, + 'bsdshell' => { + 'desc' => + 'Batch export of /etc/passwd and /etc/master.passwd files (BSD)', + 'options' => {}, + }, + 'textradius' => { + 'desc' => 'Batch export of a text /etc/raddb/users file (Livingston, Cistron)', + }, + 'sqlradius' => { + 'desc' => 'Real-time export to SQL-backed RADIUS (ICRADIUS, FreeRADIUS)', + 'options' => { + 'datasrc' => { label=>'DBI data source' }, + 'username' => { label=>'Database username' }, + 'password' => { label=>'Database password' }, + }, + 'nodomain' => 'Y', + 'notes' => 'Not specifying datasrc will export to the freeside database? (no... notes on MySQL replication, DBI::Proxy, etc., from Conf.pm && export.html etc., reset with bin/sqlradius_reset', + }, + 'cyrus' => { + 'desc' => 'Real-time export to Cyrus IMAP server', + }, + 'cp' => { + 'desc' => 'Real-time export to Critical Path Account Provisioning Protocol', + }, + 'infostreet' => { + 'desc' => 'Real-time export to InfoStreet streetSmartAPI', + 'options' => { + 'url' => { label=>'XML-RPC Access URL', }, + 'login' => { label=>'InfoStreet login', }, + 'password' => { label=>'InfoStreet password', }, + 'groupID' => { label=>'InfoStreet groupID', }, + }, + 'nodomain' => 'Y', + 'notes' => 'Real-time export to InfoStreet streetSmartAPI. Requires installation of Frontier::Client from CPAN.', + } + }, + + 'svc_domain' => {}, + + 'svc_acct_sm' => {}, + + 'svc_forward' => {}, + + 'svc_www' => {}, + +); + +=back + =head1 NEW EXPORT CLASSES -Should be added to httemplate/edit/part_export.cgi and a module should -be FS/FS/part_export/ (an example may be found in eg/export_template.pm) +Should be added to the %export hash here, and a module should be added in +FS/FS/part_export/ (an example may be found in eg/export_template.pm) =head1 BUGS @@ -413,9 +549,12 @@ Probably. Hmm... cust_export class (not necessarily a database table...) ... ? +deprecated column... + =head1 SEE ALSO -L, L, L, L, +L, L, L, +L, L, L, schema.html from the base documentation. =cut