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);
'';
#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';
return $error;
}
- my $options = shift;
foreach my $optionname ( keys %{$options} ) {
my $part_export_option = new FS::part_export_option ( {
'exportnum' => $self->exportnum,
sub replace {
my $self = shift;
+ my $old = shift;
+ my $options = shift;
local $SIG{HUP} = 'IGNORE';
local $SIG{INT} = 'IGNORE';
local $SIG{QUIT} = 'IGNORE';
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,
'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;
}
}
- #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;
my $self = shift;
my $error =
$self->ut_numbern('exportnum')
+ || $self->ut_domain('machine')
|| $self->ut_number('svcpart')
|| $self->ut_alpha('exporttype')
;
=item part_export_option
+Returns all options as FS::part_export_option objects (see
+L<FS::part_export_option>).
+
=cut
sub part_export_option {
=item options
+Returns a list of option names and values suitable for assigning to a hash.
+
=cut
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
=item rebless
+Reblesses the object into the FS::part_export::EXPORTTYPE class, where
+EXPORTTYPE is the object's I<exporttype> 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</NEW EXPORT CLASSES>.
+
=cut
sub rebless {
# $self->$method(@_);
#}
-=item export_replace
+=item export_replace NEW OLD
=cut
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
--- /dev/null
+BEGIN { $| = 1; print "1..1\n" }
+END {print "not ok 1\n" unless $loaded;}
+use FS::part_export;
+$loaded=1;
+print "ok 1\n";
--- /dev/null
+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";
%>
<%= header('Service Definition Listing', menubar( 'Main Menu' => $p) ) %>
+<SCRIPT>
+function part_export_areyousure(href) {
+ if (confirm("Are you sure you want to delete this export?") == true)
+ window.location.href = href;
+}
+</SCRIPT>
+
Services are items you offer to your customers.<BR><BR>
<%= $total %> services
<%= $cgi->param('showdisabled')
foreach my $part_export ( @part_export ) {
%>
<TR>
- <TD><%= $part_export->exporttype %> to <%= $part_export->machine %></TD>
- <TD>(options)</TD>
+ <TD><%= $part_export->exporttype %> to <%= $part_export->machine %> (<A HREF="<%= $p %>edit/part_export.cgi?<%= $part_export->exportnum %>">edit</A> | <A HREF="javascript:part_export_areyousure('<%= $p %>misc/delete-part_export.cgi?<%= $part_export->exportnum %>')">delete</A>)</TD>
+ <TD>
+ <%= itable() %>
+ <% my %opt = $part_export->options;
+ foreach my $opt ( keys %opt ) { %>
+ <TR><TD><%= $opt %></TD><TD><%= $opt{$opt} %></TD></TR>
+ <% } %>
+ </TABLE>
+ </TD>
<% } %>
- </TR><TR><TD COLSPAN=2><A HREF="<%= $p %>edit/part_export.cgi?new_with_svcpart=<%= $part_svc->svcpart %>"><I>Add a new export</I><A></TD></TR>
+ </TR><TR><TD COLSPAN=2><A HREF="<%= $p %>edit/part_export.cgi?new_with_svcpart=<%= $part_svc->svcpart %>"><I>Add a new export</I></A></TD></TR>
<% if (@part_export) { %>
<TR><TD COLSPAN=2>
<FORM METHOD="POST" ACTION="<%= $p %>edit/part_export.cgi">
<%= $part_export->exporttype %> to <%= $part_export->machine %>
</OPTION>
<% } %>
+ </SELECT>
<INPUT TYPE="submit" VALUE="clone existing export">
</FORM></TD></TR>
<% } %>
$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+)$/ ) {
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 {
} 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;
}
--- /dev/null
+<%
+
+#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");
+
+%>