more new export...
authorivan <ivan>
Fri, 22 Mar 2002 12:49:43 +0000 (12:49 +0000)
committerivan <ivan>
Fri, 22 Mar 2002 12:49:43 +0000 (12:49 +0000)
FS/FS/Record.pm
FS/FS/part_export.pm
FS/MANIFEST
FS/t/part_export.t [new file with mode: 0644]
FS/t/part_export_option.t [new file with mode: 0644]
httemplate/browse/part_svc.cgi
httemplate/edit/part_export.cgi
httemplate/edit/process/part_export.cgi
httemplate/misc/delete-part_export.cgi [new file with mode: 0755]

index 0bd7aed..ff96781 100644 (file)
@@ -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);
   '';
index 59024f6..3f184be 100644 (file)
@@ -102,6 +102,7 @@ created (see L<FS::part_export_option>).
 #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<FS::part_export_option>).
 
 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<FS::part_export_option>).
+
 =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<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 {
@@ -346,7 +363,7 @@ sub export_insert {
 #  $self->$method(@_);
 #}
 
-=item export_replace
+=item export_replace NEW OLD
 
 =cut
 
index c1aa5ef..19915cd 100644 (file)
@@ -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 (file)
index 0000000..26b3987
--- /dev/null
@@ -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 (file)
index 0000000..13200c2
--- /dev/null
@@ -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";
index cf0f040..c66b8ac 100755 (executable)
@@ -14,6 +14,13 @@ my $total = scalar(@part_svc);
 %>
 <%= 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')
@@ -61,10 +68,17 @@ my $total = scalar(@part_svc);
   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>&nbsp;|&nbsp;<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">
@@ -75,6 +89,7 @@ my $total = scalar(@part_svc);
             <%= $part_export->exporttype %> to <%= $part_export->machine %>
           </OPTION>
 <%   } %>
+        </SELECT>
         <INPUT TYPE="submit" VALUE="clone existing export">
         </FORM></TD></TR>
 <% } %>
index 7ba6fa1..3d867f5 100644 (file)
@@ -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+)$/ ) {
index b4ce0b3..d0c87a0 100644 (file)
@@ -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 (executable)
index 0000000..a5166d9
--- /dev/null
@@ -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");
+
+%>