cleaned up the new one-screen signup bits in htdocs/edit/cust_main.cgi to
authorivan <ivan>
Tue, 20 Jul 1999 10:37:05 +0000 (10:37 +0000)
committerivan <ivan>
Tue, 20 Jul 1999 10:37:05 +0000 (10:37 +0000)
prepare for a signup server

htdocs/edit/cust_main.cgi
site_perl/agent.pm
site_perl/agent_type.pm
site_perl/cust_main.pm
site_perl/cust_main_county.pm
site_perl/cust_pkg.pm
site_perl/part_pkg.pm
site_perl/pkg_svc.pm

index 51cf0ab..e2e2d33 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/perl -Tw
 #
 #!/usr/bin/perl -Tw
 #
-# $Id: cust_main.cgi,v 1.15 1999-04-14 13:14:54 ivan Exp $
+# $Id: cust_main.cgi,v 1.16 1999-07-20 10:37:05 ivan Exp $
 #
 # Usage: cust_main.cgi custnum
 #        http://server.name/path/cust_main.cgi?custnum
 #
 # Usage: cust_main.cgi custnum
 #        http://server.name/path/cust_main.cgi?custnum
 # fixed one missed day->daytime ivan@sisd.com 98-jul-13
 #
 # $Log: cust_main.cgi,v $
 # fixed one missed day->daytime ivan@sisd.com 98-jul-13
 #
 # $Log: cust_main.cgi,v $
-# Revision 1.15  1999-04-14 13:14:54  ivan
+# Revision 1.16  1999-07-20 10:37:05  ivan
+# cleaned up the new one-screen signup bits in htdocs/edit/cust_main.cgi to
+# prepare for a signup server
+#
+# Revision 1.15  1999/04/14 13:14:54  ivan
 # configuration option to edit referrals of existing customers
 #
 # Revision 1.14  1999/04/14 07:47:53  ivan
 # configuration option to edit referrals of existing customers
 #
 # Revision 1.14  1999/04/14 07:47:53  ivan
@@ -100,8 +104,6 @@ use FS::part_referral;
 use FS::cust_main_county;
 
   #for misplaced logic below
 use FS::cust_main_county;
 
   #for misplaced logic below
-  use FS::pkg_svc;
-  use FS::part_svc;
   use FS::part_pkg;
 
   #for false laziness below
   use FS::part_pkg;
 
   #for false laziness below
@@ -332,60 +334,26 @@ print "</TR></TABLE>$r required fields for each billing type";
 
 unless ( $custnum ) {
   # pry the wrong place for this logic.  also pretty expensive
 
 unless ( $custnum ) {
   # pry the wrong place for this logic.  also pretty expensive
-  #use FS::pkg_svc;
-  #use FS::part_svc;
   #use FS::part_pkg;
 
   #false laziness, copied from FS::cust_pkg::order
   #use FS::part_pkg;
 
   #false laziness, copied from FS::cust_pkg::order
-  my %part_pkg;
+  my $pkgpart;
   if ( scalar(@agents) == 1 ) {
   if ( scalar(@agents) == 1 ) {
-    # generate %part_pkg
-    # $part_pkg{$pkgpart} is true iff $custnum may purchase $pkgpart
-       #my($cust_main)=qsearchs('cust_main',{'custnum'=>$custnum});
-       #my($agent)=qsearchs('agent',{'agentnum'=> $cust_main->agentnum });
+    # $pkgpart->{$pkgpart} is true iff $custnum may purchase $pkgpart
     my($agent)=qsearchs('agent',{'agentnum'=> $agentnum });
     my($agent)=qsearchs('agent',{'agentnum'=> $agentnum });
-
-    my($type_pkgs);
-    foreach $type_pkgs ( qsearch('type_pkgs',{'typenum'=> $agent->typenum }) ) {
-      my($pkgpart)=$type_pkgs->pkgpart;
-      $part_pkg{$pkgpart}++;
-    }
+    $pkgpart = $agent->pkgpart_hashref;
   } else {
     #can't know (agent not chosen), so, allow all
     my %typenum;
     foreach my $agent ( @agents ) {
       next if $typenum{$agent->typenum}++;
   } else {
     #can't know (agent not chosen), so, allow all
     my %typenum;
     foreach my $agent ( @agents ) {
       next if $typenum{$agent->typenum}++;
-      foreach my $type_pkgs ( qsearch('type_pkgs',{'typenum'=> $agent->typenum }) ) {
-        my($pkgpart)=$type_pkgs->pkgpart;
-        $part_pkg{$pkgpart}++;
-      }
+      $pkgpart->{$_}++ foreach keys %{ $agent->pkgpart_hashref }
     }
     }
-
   }
   #eslaf
 
   }
   #eslaf
 
-  my %pkgpart;
-  #foreach ( @pkg_svc ) {
-  foreach ( qsearch( 'pkg_svc', {} ) ) {
-    my $part_svc = qsearchs ( 'part_svc', { 'svcpart' => $_->svcpart } );
-    $pkgpart{ $_->pkgpart } = -1 # never will == 1 below
-      if ( $part_svc->svcdb ne 'svc_acct' );
-    if ( $pkgpart{ $_->pkgpart } ) {
-      $pkgpart{ $_->pkgpart } = '-1';
-    } else {
-      $pkgpart{ $_->pkgpart } = $_->svcpart;
-    }
-  }
-
-  my @part_pkg =
-    #grep { $pkgpart{ $_->pkgpart } == 1 } qsearch( 'part_pkg', {} );
-    grep {
-      #( $pkgpart{ $_->pkgpart } || 0 ) == 1
-      $pkgpart{ $_->pkgpart } 
-      && $pkgpart{ $_->pkgpart } != -1
-      && $part_pkg{ $_->pkgpart }
-      ;
-    } qsearch( 'part_pkg', {} );
+  my @part_pkg = grep { $_->svcpart('svc_acct') && $pkgpart->{ $_->pkgpart } }
+    qsearch( 'part_pkg', {} );
 
   if ( @part_pkg ) {
 
 
   if ( @part_pkg ) {
 
@@ -396,7 +364,8 @@ unless ( $custnum ) {
 
     foreach my $part_pkg ( @part_pkg ) {
       print qq!<OPTION VALUE="!,
 
     foreach my $part_pkg ( @part_pkg ) {
       print qq!<OPTION VALUE="!,
-              $part_pkg->pkgpart. "_". $pkgpart{ $part_pkg->pkgpart }, '"';
+#              $part_pkg->pkgpart. "_". $pkgpart{ $part_pkg->pkgpart }, '"';
+              $part_pkg->pkgpart. "_". $part_pkg->svcpart, '"';
       print " SELECTED" if $pkgpart && ( $part_pkg->pkgpart == $pkgpart );
       print ">", $part_pkg->pkg, " - ", $part_pkg->comment;
     }
       print " SELECTED" if $pkgpart && ( $part_pkg->pkgpart == $pkgpart );
       print ">", $part_pkg->pkg, " - ", $part_pkg->comment;
     }
index cc4fb10..dab157b 100644 (file)
@@ -27,6 +27,11 @@ FS::agent - Object methods for agent records
 
   $error = $record->check;
 
 
   $error = $record->check;
 
+  $agent_type = $record->agent_type;
+
+  $hashref = $record->pkgpart_hashref;
+  #may purchase $pkgpart if $hashref->{$pkgpart};
+
 =head1 DESCRIPTION
 
 An FS::agent object represents an agent.  Every customer has an agent.  Agents
 =head1 DESCRIPTION
 
 An FS::agent object represents an agent.  Every customer has an agent.  Agents
@@ -106,24 +111,48 @@ sub check {
   return $error if $error;
 
   return "Unknown typenum!"
   return $error if $error;
 
   return "Unknown typenum!"
-    unless qsearchs( 'agent_type', { 'typenum' => $self->typenum } );
+    unless $self->agent_type;
 
   '';
 
 }
 
 
   '';
 
 }
 
+=item agent_type
+
+Returns the FS::agent_type object (see L<FS::agent_type>) for this agent.
+
+=cut
+
+sub agent_type {
+  my $self = shift;
+  qsearchs( 'agent_type', { 'typenum' => $self->typenum } );
+}
+
+=item pkgpart_hashref
+
+Returns a hash reference.  The keys of the hash are pkgparts.  The value is
+true iff this agent may purchase the specified package definition.  See
+L<FS::part_pkg>.
+
+=cut
+
+sub pkgpart_hashref {
+  my $self = shift;
+  $self->agent_type->pkgpart_hashref;
+}
+
 =back
 
 =head1 VERSION
 
 =back
 
 =head1 VERSION
 
-$Id: agent.pm,v 1.4 1998-12-30 00:30:44 ivan Exp $
+$Id: agent.pm,v 1.5 1999-07-20 10:37:05 ivan Exp $
 
 =head1 BUGS
 
 =head1 SEE ALSO
 
 
 =head1 BUGS
 
 =head1 SEE ALSO
 
-L<FS::Record>, L<FS::agent_type>, L<FS::cust_main>, schema.html from the base
-documentation.
+L<FS::Record>, L<FS::agent_type>, L<FS::cust_main>, L<FS::part_pkg>, 
+schema.html from the base documentation.
 
 =head1 HISTORY
 
 
 =head1 HISTORY
 
index 54a91c8..6ea3d2a 100644 (file)
@@ -3,6 +3,8 @@ package FS::agent_type;
 use strict;
 use vars qw( @ISA );
 use FS::Record qw( qsearch );
 use strict;
 use vars qw( @ISA );
 use FS::Record qw( qsearch );
+use FS::agent;
+use FS::type_pkgs;
 
 @ISA = qw( FS::Record );
 
 
 @ISA = qw( FS::Record );
 
@@ -25,6 +27,13 @@ FS::agent_type - Object methods for agent_type records
 
   $error = $record->check;
 
 
   $error = $record->check;
 
+  $hashref = $record->pkgpart_hashref;
+  #may purchase $pkgpart if $hashref->{$pkgpart};
+
+  @type_pkgs = $record->type_pkgs;
+
+  @pkgparts = $record->pkgpart;
+
 =head1 DESCRIPTION
 
 An FS::agent_type object represents an agent type.  Every agent (see
 =head1 DESCRIPTION
 
 An FS::agent_type object represents an agent type.  Every agent (see
@@ -97,11 +106,49 @@ sub check {
 
 }
 
 
 }
 
+=item pkgpart_hashref
+
+Returns a hash reference.  The keys of the hash are pkgparts.  The value is
+true iff this agent may purchase the specified package definition.  See
+L<FS::part_pkg>.
+
+=cut
+
+sub pkgpart_hashref {
+  my $self = shift;
+  my %pkgpart;
+  $pkgpart{$_}++ foreach $self->pkgpart;
+  \%pkgpart;
+}
+
+=item type_pkgs
+
+Returns all FS::type_pkgs objects (see L<FS::type_pkgs>) for this agent type.
+
+=cut
+
+sub type_pkgs {
+  my $self = shift;
+  qsearch('type_pkgs', { 'typenum' => $self->typenum } );
+}
+
+=item pkgpart
+
+Returns the pkgpart of all package definitions (see L<FS::part_pkg>) for this
+agent type.
+
+=cut
+
+sub pkgpart {
+  my $self = shift;
+  map $_->pkgpart, $self->type_pkgs;
+}
+
 =back
 
 =head1 VERSION
 
 =back
 
 =head1 VERSION
 
-$Id: agent_type.pm,v 1.2 1998-12-29 11:59:35 ivan Exp $
+$Id: agent_type.pm,v 1.3 1999-07-20 10:37:05 ivan Exp $
 
 =head1 BUGS
 
 
 =head1 BUGS
 
@@ -126,7 +173,11 @@ Changed 'type' to 'atype' because Pg6.3 reserves the type word
 pod, added check in delete ivan@sisd.com 98-sep-21
 
 $Log: agent_type.pm,v $
 pod, added check in delete ivan@sisd.com 98-sep-21
 
 $Log: agent_type.pm,v $
-Revision 1.2  1998-12-29 11:59:35  ivan
+Revision 1.3  1999-07-20 10:37:05  ivan
+cleaned up the new one-screen signup bits in htdocs/edit/cust_main.cgi to
+prepare for a signup server
+
+Revision 1.2  1998/12/29 11:59:35  ivan
 mostly properly OO, some work still to be done with svc_ stuff
 
 
 mostly properly OO, some work still to be done with svc_ stuff
 
 
index d67e681..6140dcc 100644 (file)
@@ -143,6 +143,8 @@ FS::Record.  The following fields are currently supported:
 
 =item night - phone (optional)
 
 
 =item night - phone (optional)
 
+=item fax - phone (optional)
+
 =item payby - `CARD' (credit cards), `BILL' (billing), or `COMP' (free)
 
 =item payinfo - card number, P.O.#, or comp issuer (4-8 lowercase alphanumerics; think username)
 =item payby - `CARD' (credit cards), `BILL' (billing), or `COMP' (free)
 
 =item payinfo - card number, P.O.#, or comp issuer (4-8 lowercase alphanumerics; think username)
@@ -928,7 +930,7 @@ sub check_invoicing_list {
 
 =head1 VERSION
 
 
 =head1 VERSION
 
-$Id: cust_main.pm,v 1.23 1999-07-17 02:24:14 ivan Exp $
+$Id: cust_main.pm,v 1.24 1999-07-20 10:37:05 ivan Exp $
 
 =head1 BUGS
 
 
 =head1 BUGS
 
@@ -987,7 +989,11 @@ enable cybercash, cybercash v3 support, don't need to import
 FS::UID::{datasrc,checkruid} ivan@sisd.com 98-sep-19-21
 
 $Log: cust_main.pm,v $
 FS::UID::{datasrc,checkruid} ivan@sisd.com 98-sep-19-21
 
 $Log: cust_main.pm,v $
-Revision 1.23  1999-07-17 02:24:14  ivan
+Revision 1.24  1999-07-20 10:37:05  ivan
+cleaned up the new one-screen signup bits in htdocs/edit/cust_main.cgi to
+prepare for a signup server
+
+Revision 1.23  1999/07/17 02:24:14  ivan
 bug noticed by Steve Gertz <sglist@hollywood.mwis.net>
 
 Revision 1.22  1999/04/15 16:44:36  ivan
 bug noticed by Steve Gertz <sglist@hollywood.mwis.net>
 
 Revision 1.22  1999/04/15 16:44:36  ivan
index 1ecaed1..1418ca1 100644 (file)
@@ -86,6 +86,7 @@ sub check {
   $self->ut_numbern('taxnum')
     || $self->ut_textn('state')
     || $self->ut_textn('county')
   $self->ut_numbern('taxnum')
     || $self->ut_textn('state')
     || $self->ut_textn('county')
+    || $self->ut_text('country')
     || $self->ut_float('tax')
   ;
 
     || $self->ut_float('tax')
   ;
 
@@ -95,7 +96,7 @@ sub check {
 
 =head1 VERSION
 
 
 =head1 VERSION
 
-$Id: cust_main_county.pm,v 1.3 1998-12-29 11:59:41 ivan Exp $
+$Id: cust_main_county.pm,v 1.4 1999-07-20 10:37:05 ivan Exp $
 
 =head1 BUGS
 
 
 =head1 BUGS
 
@@ -114,7 +115,11 @@ Changed check for 'tax' to use the new ut_float subroutine
 pod ivan@sisd.com 98-sep-21
 
 $Log: cust_main_county.pm,v $
 pod ivan@sisd.com 98-sep-21
 
 $Log: cust_main_county.pm,v $
-Revision 1.3  1998-12-29 11:59:41  ivan
+Revision 1.4  1999-07-20 10:37:05  ivan
+cleaned up the new one-screen signup bits in htdocs/edit/cust_main.cgi to
+prepare for a signup server
+
+Revision 1.3  1998/12/29 11:59:41  ivan
 mostly properly OO, some work still to be done with svc_ stuff
 
 Revision 1.2  1998/11/18 09:01:43  ivan
 mostly properly OO, some work still to be done with svc_ stuff
 
 Revision 1.2  1998/11/18 09:01:43  ivan
index aa68f60..bbd2429 100644 (file)
@@ -396,18 +396,12 @@ L<FS::pkg_svc>).
 sub order {
   my($custnum,$pkgparts,$remove_pkgnums)=@_;
 
 sub order {
   my($custnum,$pkgparts,$remove_pkgnums)=@_;
 
-  my(%part_pkg);
   # generate %part_pkg
   # $part_pkg{$pkgpart} is true iff $custnum may purchase $pkgpart
   # generate %part_pkg
   # $part_pkg{$pkgpart} is true iff $custnum may purchase $pkgpart
-    my($cust_main)=qsearchs('cust_main',{'custnum'=>$custnum});
-    my($agent)=qsearchs('agent',{'agentnum'=> $cust_main->agentnum });
-
-    my($type_pkgs);
-    foreach $type_pkgs ( qsearch('type_pkgs',{'typenum'=> $agent->typenum }) ) {
-      my($pkgpart)=$type_pkgs->pkgpart;
-      $part_pkg{$pkgpart}++;
-    }
   #
   #
+  my($cust_main)=qsearchs('cust_main',{'custnum'=>$custnum});
+  my($agent)=qsearchs('agent',{'agentnum'=> $cust_main->agentnum });
+  my %part_pkg = %{ $agent->pkgpart_hashref };
 
   my(%svcnum);
   # generate %svcnum
 
   my(%svcnum);
   # generate %svcnum
@@ -496,7 +490,7 @@ sub order {
 
 =head1 VERSION
 
 
 =head1 VERSION
 
-$Id: cust_pkg.pm,v 1.9 1999-03-29 01:11:51 ivan Exp $
+$Id: cust_pkg.pm,v 1.10 1999-07-20 10:37:05 ivan Exp $
 
 =head1 BUGS
 
 
 =head1 BUGS
 
@@ -527,7 +521,11 @@ fixed for new agent->agent_type->type_pkgs in &order ivan@sisd.com 98-mar-7
 pod ivan@sisd.com 98-sep-21
 
 $Log: cust_pkg.pm,v $
 pod ivan@sisd.com 98-sep-21
 
 $Log: cust_pkg.pm,v $
-Revision 1.9  1999-03-29 01:11:51  ivan
+Revision 1.10  1999-07-20 10:37:05  ivan
+cleaned up the new one-screen signup bits in htdocs/edit/cust_main.cgi to
+prepare for a signup server
+
+Revision 1.9  1999/03/29 01:11:51  ivan
 use FS::type_pkgs
 
 Revision 1.8  1999/03/25 13:48:14  ivan
 use FS::type_pkgs
 
 Revision 1.8  1999/03/25 13:48:14  ivan
index 4b6cc09..556146e 100644 (file)
@@ -2,7 +2,8 @@ package FS::part_pkg;
 
 use strict;
 use vars qw( @ISA );
 
 use strict;
 use vars qw( @ISA );
-use FS::Record;
+use FS::Record qw( qsearch );
+use FS::pkg_svc;
 
 @ISA = qw( FS::Record );
 
 
 @ISA = qw( FS::Record );
 
@@ -27,6 +28,11 @@ FS::part_pkg - Object methods for part_pkg objects
 
   $error = $record->check;
 
 
   $error = $record->check;
 
+  @pkg_svc = $record->pkg_svc;
+
+  $svcnum = $record->svcpart;
+  $svcnum = $record->svcpart( 'svc_acct' );
+
 =head1 DESCRIPTION
 
 An FS::part_pkg object represents a billing item definition.  FS::part_pkg
 =head1 DESCRIPTION
 
 An FS::part_pkg object represents a billing item definition.  FS::part_pkg
@@ -125,16 +131,45 @@ sub check {
   ;
 }
 
   ;
 }
 
+=item pkg_svc
+
+Returns all FS::pkg_svc objects (see L<FS::pkg_svc>) for this package
+definition.
+
+=cut
+
+sub pkg_svc {
+  my $self = shift;
+  qsearch( 'pkg_svc', { 'pkgpart' => $self->pkgpart } );
+}
+
+=item svcpart [ SVCDB ]
+
+Returns the svcpart of a single service definition (see L<FS::part_svc>)
+associated with this billing item definition (see L<FS::pkg_svc>).  Returns
+false if there not exactly one service definition with quantity 1, or if 
+SVCDB is specified and does not match the svcdb of the service definition, 
+
+=cut
+
+sub svcpart {
+  my $self = shift;
+  my $svcdb = shift;
+  my @pkg_svc = $self->pkg_svc;
+  return '' if scalar(@pkg_svc) != 1
+               || $pkg_svc[0]->quantity != 1
+               || ( $svcdb && $pkg_svc[0]->part_svc->svcdb ne $svcdb );
+  $pkg_svc[0]->svcpart;
+}
+
 =back
 
 =head1 VERSION
 
 =back
 
 =head1 VERSION
 
-$Id: part_pkg.pm,v 1.5 1998-12-31 01:04:16 ivan Exp $
+$Id: part_pkg.pm,v 1.6 1999-07-20 10:37:05 ivan Exp $
 
 =head1 BUGS
 
 
 =head1 BUGS
 
-It doesn't properly override FS::Record yet.
-
 The delete method is unimplemented.
 
 setup and recur semantics are not yet defined (and are implemented in
 The delete method is unimplemented.
 
 setup and recur semantics are not yet defined (and are implemented in
@@ -152,7 +187,11 @@ ivan@sisd.com 97-dec-5
 pod ivan@sisd.com 98-sep-21
 
 $Log: part_pkg.pm,v $
 pod ivan@sisd.com 98-sep-21
 
 $Log: part_pkg.pm,v $
-Revision 1.5  1998-12-31 01:04:16  ivan
+Revision 1.6  1999-07-20 10:37:05  ivan
+cleaned up the new one-screen signup bits in htdocs/edit/cust_main.cgi to
+prepare for a signup server
+
+Revision 1.5  1998/12/31 01:04:16  ivan
 doc
 
 Revision 1.3  1998/11/15 13:00:15  ivan
 doc
 
 Revision 1.3  1998/11/15 13:00:15  ivan
index ee4ad62..f28745d 100644 (file)
@@ -3,6 +3,8 @@ package FS::pkg_svc;
 use strict;
 use vars qw( @ISA );
 use FS::Record qw( qsearchs );
 use strict;
 use vars qw( @ISA );
 use FS::Record qw( qsearchs );
+use FS::part_pkg;
+use FS::part_svc;
 
 @ISA = qw( FS::Record );
 
 
 @ISA = qw( FS::Record );
 
@@ -25,6 +27,10 @@ FS::pkg_svc - Object methods for pkg_svc records
 
   $error = $record->check;
 
 
   $error = $record->check;
 
+  $part_pkg = $record->part_pkg;
+
+  $part_svc = $record->part_svc;
+
 =head1 DESCRIPTION
 
 An FS::pkg_svc record links a billing item definition (see L<FS::part_pkg>) to
 =head1 DESCRIPTION
 
 An FS::pkg_svc record links a billing item definition (see L<FS::part_pkg>) to
@@ -99,20 +105,39 @@ sub check {
   ;
   return $error if $error;
 
   ;
   return $error if $error;
 
-  return "Unknown pkgpart!"
-    unless qsearchs( 'part_pkg', { 'pkgpart' => $self->pkgpart } );
-
-  return "Unknown svcpart!"
-    unless qsearchs('part_svc', { 'svcpart' => $self->svcpart } );
+  return "Unknown pkgpart!" unless $self->part_pkg;
+  return "Unknown svcpart!" unless $self->part_svc;
 
   ''; #no error
 }
 
 
   ''; #no error
 }
 
+=item part_pkg
+
+Returns the FS::part_pkg object (see L<FS::part_pkg>).
+
+=cut
+
+sub part_pkg {
+  my $self = shift;
+  qsearchs( 'part_pkg', { 'pkgpart' => $self->pkgpart } );
+}
+
+=item part_svc
+
+Returns the FS::part_svc object (see L<FS::part_svc>).
+
+=cut
+
+sub part_svc {
+  my $self = shift;
+  qsearchs( 'part_svc', { 'svcpart' => $self->svcpart } );
+}
+
 =back
 
 =head1 VERSION
 
 =back
 
 =head1 VERSION
 
-$Id: pkg_svc.pm,v 1.3 1999-01-18 21:58:08 ivan Exp $
+$Id: pkg_svc.pm,v 1.4 1999-07-20 10:37:05 ivan Exp $
 
 =head1 BUGS
 
 
 =head1 BUGS
 
@@ -131,7 +156,11 @@ ivan@sisd.com 97-nov-13
 pod ivan@sisd.com 98-sep-22
 
 $Log: pkg_svc.pm,v $
 pod ivan@sisd.com 98-sep-22
 
 $Log: pkg_svc.pm,v $
-Revision 1.3  1999-01-18 21:58:08  ivan
+Revision 1.4  1999-07-20 10:37:05  ivan
+cleaned up the new one-screen signup bits in htdocs/edit/cust_main.cgi to
+prepare for a signup server
+
+Revision 1.3  1999/01/18 21:58:08  ivan
 esthetic: eq and ne were used in a few places instead of == and !=
 
 Revision 1.2  1998/12/29 11:59:51  ivan
 esthetic: eq and ne were used in a few places instead of == and !=
 
 Revision 1.2  1998/12/29 11:59:51  ivan