From b159f42fa3f48cc2ca3b43773e7661e17d2fb072 Mon Sep 17 00:00:00 2001 From: ivan Date: Fri, 22 Mar 2002 12:49:43 +0000 Subject: [PATCH 1/1] more new export... --- FS/FS/Record.pm | 2 +- FS/FS/part_export.pm | 43 +++++++++++++++++++++++---------- FS/MANIFEST | 2 ++ FS/t/part_export.t | 5 ++++ FS/t/part_export_option.t | 5 ++++ httemplate/browse/part_svc.cgi | 21 +++++++++++++--- httemplate/edit/part_export.cgi | 2 +- httemplate/edit/process/part_export.cgi | 16 ++++-------- httemplate/misc/delete-part_export.cgi | 15 ++++++++++++ 9 files changed, 82 insertions(+), 29 deletions(-) create mode 100644 FS/t/part_export.t create mode 100644 FS/t/part_export_option.t create mode 100755 httemplate/misc/delete-part_export.cgi diff --git a/FS/FS/Record.pm b/FS/FS/Record.pm index 0bd7aeda4..ff967817a 100644 --- a/FS/FS/Record.pm +++ b/FS/FS/Record.pm @@ -947,7 +947,7 @@ Check/untaint host and domain names. sub ut_domain { my( $self, $field ) = @_; #$self->getfield($field) =~/^(\w+\.)*\w+$/ - $self->getfield($field) =~/^(\w+\.)*\w+$/ + $self->getfield($field) =~/^([\w\-]+\.)*\w+$/ or return "Illegal (domain) $field: ". $self->getfield($field); $self->setfield($field,$1); ''; diff --git a/FS/FS/part_export.pm b/FS/FS/part_export.pm index 59024f651..3f184be07 100644 --- a/FS/FS/part_export.pm +++ b/FS/FS/part_export.pm @@ -102,6 +102,7 @@ created (see L). #false laziness w/queue.pm sub insert { my $self = shift; + my $options = shift; local $SIG{HUP} = 'IGNORE'; local $SIG{INT} = 'IGNORE'; local $SIG{QUIT} = 'IGNORE'; @@ -119,7 +120,6 @@ sub insert { return $error; } - my $options = shift; foreach my $optionname ( keys %{$options} ) { my $part_export_option = new FS::part_export_option ( { 'exportnum' => $self->exportnum, @@ -191,6 +191,8 @@ created or modified (see L). sub replace { my $self = shift; + my $old = shift; + my $options = shift; local $SIG{HUP} = 'IGNORE'; local $SIG{INT} = 'IGNORE'; local $SIG{QUIT} = 'IGNORE'; @@ -202,13 +204,12 @@ sub replace { local $FS::UID::AutoCommit = 0; my $dbh = dbh; - my $error = $self->SUPER::replace; + my $error = $self->SUPER::replace($old); if ( $error ) { $dbh->rollback if $oldAutoCommit; return $error; } - my $options = shift; foreach my $optionname ( keys %{$options} ) { my $old = qsearchs( 'part_export_option', { 'exportnum' => $self->exportnum, @@ -219,6 +220,7 @@ sub replace { 'optionname' => $optionname, 'optionvalue' => $options->{$optionname}, } ); + $new->optionnum($old->optionnum) if $old; my $error = $old ? $new->replace($old) : $new->insert; if ( $error ) { $dbh->rollback if $oldAutoCommit; @@ -226,14 +228,16 @@ sub replace { } } - #remove extraneous old options? not necessary now, but... - #foreach my $opt ( grep { !exist $options->{$_->optionname} } $old->part_export_option ) { - # my $error = $opt->delete; - # if ( $error ) { - # $dbh->rollback if $oldAutoCommit; - # return $error; - # } - #} + #remove extraneous old options + foreach my $opt ( + grep { !exists $options->{$_->optionname} } $old->part_export_option + ) { + my $error = $opt->delete; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + } $dbh->commit or die $dbh->errstr if $oldAutoCommit; @@ -253,6 +257,7 @@ sub check { my $self = shift; my $error = $self->ut_numbern('exportnum') + || $self->ut_domain('machine') || $self->ut_number('svcpart') || $self->ut_alpha('exporttype') ; @@ -286,6 +291,9 @@ sub part_svc { =item part_export_option +Returns all options as FS::part_export_option objects (see +L). + =cut sub part_export_option { @@ -295,6 +303,8 @@ sub part_export_option { =item options +Returns a list of option names and values suitable for assigning to a hash. + =cut sub options { @@ -302,7 +312,9 @@ sub options { map { $_->optionname => $_->optionvalue } $self->part_export_option; } -=item option +=item option OPTIONNAME + +Returns the option value for the given name, or the empty string. =cut @@ -318,6 +330,11 @@ sub option { =item rebless +Reblesses the object into the FS::part_export::EXPORTTYPE class, where +EXPORTTYPE is the object's I field. There should be better docs +on how to create new exports (and they should live in their own files and be +autoloaded-on-demand), but until then, see L. + =cut sub rebless { @@ -346,7 +363,7 @@ sub export_insert { # $self->$method(@_); #} -=item export_replace +=item export_replace NEW OLD =cut diff --git a/FS/MANIFEST b/FS/MANIFEST index c1aa5ef1a..19915cdc9 100644 --- a/FS/MANIFEST +++ b/FS/MANIFEST @@ -90,6 +90,8 @@ t/cust_svc.t t/domain_record.t t/nas.t t/part_bill_event.t +t/part_export.t +t/part_export_option.t t/part_pkg.t t/part_pop_local.t t/part_referral.t diff --git a/FS/t/part_export.t b/FS/t/part_export.t new file mode 100644 index 000000000..26b398791 --- /dev/null +++ b/FS/t/part_export.t @@ -0,0 +1,5 @@ +BEGIN { $| = 1; print "1..1\n" } +END {print "not ok 1\n" unless $loaded;} +use FS::part_export; +$loaded=1; +print "ok 1\n"; diff --git a/FS/t/part_export_option.t b/FS/t/part_export_option.t new file mode 100644 index 000000000..13200c213 --- /dev/null +++ b/FS/t/part_export_option.t @@ -0,0 +1,5 @@ +BEGIN { $| = 1; print "1..1\n" } +END {print "not ok 1\n" unless $loaded;} +use FS::part_export_option; +$loaded=1; +print "ok 1\n"; diff --git a/httemplate/browse/part_svc.cgi b/httemplate/browse/part_svc.cgi index cf0f0408c..c66b8ac63 100755 --- a/httemplate/browse/part_svc.cgi +++ b/httemplate/browse/part_svc.cgi @@ -14,6 +14,13 @@ my $total = scalar(@part_svc); %> <%= header('Service Definition Listing', menubar( 'Main Menu' => $p) ) %> + + Services are items you offer to your customers.

<%= $total %> services <%= $cgi->param('showdisabled') @@ -61,10 +68,17 @@ my $total = scalar(@part_svc); foreach my $part_export ( @part_export ) { %> - <%= $part_export->exporttype %> to <%= $part_export->machine %> - (options) + <%= $part_export->exporttype %> to <%= $part_export->machine %> (edit | delete) + + <%= itable() %> + <% my %opt = $part_export->options; + foreach my $opt ( keys %opt ) { %> + <%= $opt %><%= $opt{$opt} %> + <% } %> + + <% } %> - Add a new export + Add a new export <% if (@part_export) { %>
@@ -75,6 +89,7 @@ my $total = scalar(@part_svc); <%= $part_export->exporttype %> to <%= $part_export->machine %> <% } %> +
<% } %> diff --git a/httemplate/edit/part_export.cgi b/httemplate/edit/part_export.cgi index 7ba6fa12b..3d867f50a 100644 --- a/httemplate/edit/part_export.cgi +++ b/httemplate/edit/part_export.cgi @@ -27,7 +27,7 @@ if ( $cgi->param('clone') && $cgi->param('clone') =~ /^(\d+)$/ ) { $action = 'Add'; my $old_part_export = qsearchs('part_export', { 'exportnum' => $1 } ); unless ( $part_export ) { - ($part_export, $options) = $old_part_export->clone; + ($part_export, $options) = $old_part_export->clone($cgi->param('svcpart')); } } elsif ( $cgi->param('new_with_svcpart') && $cgi->param('new_with_svcpart') =~ /^(\d+)$/ ) { diff --git a/httemplate/edit/process/part_export.cgi b/httemplate/edit/process/part_export.cgi index b4ce0b352..d0c87a02a 100644 --- a/httemplate/edit/process/part_export.cgi +++ b/httemplate/edit/process/part_export.cgi @@ -5,7 +5,8 @@ my $exportnum = $cgi->param('exportnum'); my $old = qsearchs('part_export', { 'exportnum'=>$exportnum } ) if $exportnum; #fixup options -my %options = map { $_=>$cgi->param($_) } $cgi->param('options'); +warn join('-', split(',',$cgi->param('options'))); +my %options = map { $_=>$cgi->param($_) } split(',',$cgi->param('options')); my $new = new FS::part_export ( { map { @@ -13,20 +14,13 @@ my $new = new FS::part_export ( { } fields('part_export') } ); -local $SIG{HUP} = 'IGNORE'; -local $SIG{INT} = 'IGNORE'; -local $SIG{QUIT} = 'IGNORE'; -local $SIG{TERM} = 'IGNORE'; -local $SIG{TSTP} = 'IGNORE'; -local $SIG{PIPE} = 'IGNORE'; - -local $FS::UID::AutoCommit = 0; - my $error; if ( $exportnum ) { + warn $old; + warn $exportnum; $error = $new->replace($old,\%options); } else { - $error = $new->insert,\%options); + $error = $new->insert(\%options); # $exportnum = $new->exportnum; } diff --git a/httemplate/misc/delete-part_export.cgi b/httemplate/misc/delete-part_export.cgi new file mode 100755 index 000000000..a5166d944 --- /dev/null +++ b/httemplate/misc/delete-part_export.cgi @@ -0,0 +1,15 @@ +<% + +#untaint paynum +my($query) = $cgi->keywords; +$query =~ /^(\d+)$/ || die "Illegal exportnum"; +my $exportnum = $1; + +my $part_export = qsearchs('part_export',{'exportnum'=>$exportnum}); + +my $error = $part_export->delete; +eidiot($error) if $error; + +print $cgi->redirect($p. "browse/part_svc.cgi"); + +%> -- 2.11.0