#!/usr/bin/perl -Tw
#
-# $Id: signup.cgi,v 1.34 2002-11-29 05:14:21 ivan Exp $
+# $Id: signup.cgi,v 1.43 2003-07-04 03:21:42 ivan Exp $
use strict;
-use vars qw( @payby $cgi $locales $packages $pops $init_data $error
+use vars qw( @payby $cgi $locales $packages
+ $pops %pop %popnum2pop
+ $init_data $error
$last $first $ss $company $address1 $address2 $city $state $county
$country $zip $daytime $night $fax $invoicing_list $payby $payinfo
- $paydate $payname $referral_custnum
+ $paydate $payname $referral_custnum $init_popstate
$pkgpart $username $password $password2 $sec_phrase $popnum
$agentnum
$ieak_file $ieak_template $cck_file $cck_template
( $locales, $packages, $pops, $init_data ) = signup_info();
@payby = @{$init_data->{'payby'}} if @{$init_data->{'payby'}};
$packages = $init_data->{agentnum2part_pkg}{$agentnum} if $agentnum;
+%pop = ();
+%popnum2pop = ();
+foreach (@$pops) {
+ push @{ $pop{ $_->{state} }->{ $_->{ac} } }, $_;
+ $popnum2pop{$_->{popnum}} = $_;
+}
$cgi = new CGI;
}
$payby = $cgi->param('payby');
- $payinfo = $cgi->param( $payby. '_payinfo' );
+ if ( $payby eq 'CHEK' || $payby eq 'DCHK' ) {
+ #$payinfo = join('@', map { $cgi->param( $payby. "_payinfo$_" ) } (1,2) );
+ $payinfo = $cgi->param($payby. '_payinfo1'). '@'.
+ $cgi->param($payby. '_payinfo2');
+ } else {
+ $payinfo = $cgi->param( $payby. '_payinfo' );
+ }
$paydate =
$cgi->param( $payby. '_month' ). '-'. $cgi->param( $payby. '_year' );
$payname = $cgi->param( $payby. '_payname' );
$password = $cgi->param('_password');
$popnum = $cgi->param('popnum');
#$agentnum, # = $cgi->param('agentnum'),
+ $init_popstate = $cgi->param('init_popstate');
if ( $cgi->param('_password') ne $cgi->param('_password2') ) {
$error = $init_data->{msgcat}{passwords_dont_match}; #msgcat
} else {
$password2 = $cgi->param('_password2');
- if ( $payby eq 'CARD' && $cgi->param('CARD_type') ) {
+ if ( $payby =~ /^(CARD|DCRD)$/ && $cgi->param('CARD_type') ) {
$payinfo =~ s/\D//g;
$payinfo =~ /^(\d{13,16})$/
$sec_phrase = '';
$popnum = '';
$referral_custnum = $cgi->param('ref') || '';
+ $init_popstate = $cgi->param('init_popstate') || '';
print_form;
}
sub print_form {
$cgi->delete('ref');
+ $cgi->delete('init_popstate');
$self_url = $cgi->self_url;
$error = "Error: $error" if $error;
or die "fatal: invalid email_name got past FS::SignupClient::new_customer";
$email_name = $1; #global for template
- my $pop = pop_info($cgi->param('popnum'));
+ my $pop = $popnum2pop{$cgi->param('popnum')};
#or die "fatal: invalid popnum got past FS::SignupClient::new_customer";
if ( $pop ) {
( $ac, $exch, $loc ) = ( $pop->{'ac'}, $pop->{'exch'}, $pop->{'loc'} );
}
}
-sub pop_info {
- my $popnum = shift;
- my $pop;
- foreach $pop ( @{$pops} ) {
- if ( $pop->{'popnum'} == $popnum ) { return $pop; }
- }
- '';
-}
-
#horrible false laziness with FS/FS/svc_acct_pop.pm::popselector
sub popselector {
return '<INPUT TYPE="hidden" NAME="popnum" VALUE="">' unless @$pops;
return $pops->[0]{city}. ', '. $pops->[0]{state}.
- ' ('. $pops->[0]{ac}. ')/'. $pops->[0]{exch}.
+ ' ('. $pops->[0]{ac}. ')/'. $pops->[0]{exch}. '-'. $pops->[0]{loc}.
'<INPUT TYPE="hidden" NAME="popnum" VALUE="'. $pops->[0]{popnum}. '">'
if scalar(@$pops) == 1;
- my %pop = ();
- foreach (@$pops) {
- push @{ $pop{ $_->{state} }->{ $_->{ac} } }, $_;
- }
+ #my %pop = ();
+ #my %popnum2pop = ();
+ #foreach (@$pops) {
+ # push @{ $pop{ $_->{state} }->{ $_->{ac} } }, $_;
+ # $popnum2pop{$_->{popnum}} = $_;
+ #}
my $text = <<END;
<SCRIPT>
var length = what.length;
what.options[length] = optionName;
}
+END
- function acstate_changed(what) {
- state = what.options[what.selectedIndex].text;
- for (var i = what.form.popac.length;i > 0;i--)
- what.form.popac.options[i] = null;
- what.form.popac.options[0] = new Option("Area code", "-1", false, true);
+ if ( $init_popstate ) {
+ $text .= '<INPUT TYPE="hidden" NAME="init_popstate" VALUE="'.
+ $init_popstate. '">';
+ } else {
+ $text .= <<END;
+ function acstate_changed(what) {
+ state = what.options[what.selectedIndex].text;
+ what.form.popac.options.length = 0
+ what.form.popac.options[0] = new Option("Area code", "-1", false, true);
END
+ }
- foreach my $state ( sort { $a cmp $b } keys %pop ) {
- $text .= "\nif ( state == \"$state\" ) {\n";
+ my @states = $init_popstate ? ( $init_popstate ) : keys %pop;
+ foreach my $state ( sort { $a cmp $b } @states ) {
+ $text .= "\nif ( state == \"$state\" ) {\n" unless $init_popstate;
foreach my $ac ( sort { $a cmp $b } keys %{ $pop{$state} }) {
$text .= "opt(what.form.popac, \"$ac\", \"$ac\");\n";
$text .= "what.form.popac.options[what.form.popac.length-1].selected = true;\n";
}
}
- $text .= "}\n";
+ $text .= "}\n" unless $init_popstate;
}
$text .= "popac_changed(what.form.popac)}\n";
$text .= <<END;
function popac_changed(what) {
ac = what.options[what.selectedIndex].text;
- for (var i = what.form.popnum.length;i > 0;i--)
- what.form.popnum.options[i] = null;
+ what.form.popnum.options.length = 0;
what.form.popnum.options[0] = new Option("City", "-1", false, true);
END
- foreach my $state ( keys %pop ) {
+ foreach my $state ( @states ) {
foreach my $popac ( keys %{ $pop{$state} } ) {
$text .= "\nif ( ac == \"$popac\" ) {\n";
foreach my $pop ( @{$pop{$state}->{$popac}}) {
my $o_popnum = $pop->{popnum};
my $poptext = $pop->{city}. ', '. $pop->{state}.
- ' ('. $pop->{ac}. ')/'. $pop->{exch};
+ ' ('. $pop->{ac}. ')/'. $pop->{exch}. '-'. $pop->{loc};
$text .= "opt(what.form.popnum, \"$o_popnum\", \"$poptext\");\n";
if ($popnum == $o_popnum) {
qq!<TABLE CELLPADDING="0"><TR><TD><SELECT NAME="acstate"! .
qq!SIZE=1 onChange="acstate_changed(this)"><OPTION VALUE=-1>State!;
$text .= "<OPTION" . ($_ eq $cgi->param('acstate') ? " SELECTED" : "") .
- ">$_" foreach sort { $a cmp $b } keys %pop;
+ ">$_" foreach sort { $a cmp $b } @states;
$text .= '</SELECT>'; #callback? return 3 html pieces? #'</TD>';
$text .=
$text .= qq!<TR><TD><SELECT NAME="popnum" SIZE=1 STYLE="width: 20em"><OPTION>City!;
+
#comment this block to disable initial list polulation
- foreach my $pop ( sort { $a->{state} cmp $b->{state} } @$pops ) {
+ my @initial_select = ();
+ if ( scalar( @$pops ) > 100 ) {
+ push @initial_select, $popnum2pop{$popnum} if $popnum2pop{$popnum};
+ } else {
+ @initial_select = @$pops;
+ }
+ foreach my $pop ( sort { $a->{state} cmp $b->{state} } @initial_select ) {
$text .= qq!<OPTION VALUE="!. $pop->{popnum}. '"'.
( ( $popnum && $pop->{popnum} == $popnum ) ? ' SELECTED' : '' ). ">".
$pop->{city}. ', '. $pop->{state}.
- ' ('. $pop->{ac}. ')/'. $pop->{exch};
+ ' ('. $pop->{ac}. ')/'. $pop->{exch}. '-'. $pop->{loc};
}
$text .= qq!</SELECT></TD></TR></TABLE>!;