diff options
| author | ivan <ivan> | 2002-11-28 10:54:28 +0000 | 
|---|---|---|
| committer | ivan <ivan> | 2002-11-28 10:54:28 +0000 | 
| commit | 221b423fecf5380c0311f0f3fee4e47ef1494053 (patch) | |
| tree | 3ecaf6a9adb89a3fae10cc5533b21fbdffdf44f5 /fs_signup/FS-SignupClient | |
| parent | 49d0c36b530660c8ffa622b124ee5bc123fbc374 (diff) | |
separate state and country <SELECT> in signup server also, closes: Bug#353
Diffstat (limited to 'fs_signup/FS-SignupClient')
| -rwxr-xr-x | fs_signup/FS-SignupClient/cgi/signup.cgi | 123 | ||||
| -rwxr-xr-x | fs_signup/FS-SignupClient/cgi/signup.html | 27 | 
2 files changed, 131 insertions, 19 deletions
| diff --git a/fs_signup/FS-SignupClient/cgi/signup.cgi b/fs_signup/FS-SignupClient/cgi/signup.cgi index 537662c3a..e45c85056 100755 --- a/fs_signup/FS-SignupClient/cgi/signup.cgi +++ b/fs_signup/FS-SignupClient/cgi/signup.cgi @@ -1,6 +1,6 @@  #!/usr/bin/perl -Tw  # -# $Id: signup.cgi,v 1.29.2.2 2002-11-19 09:52:02 ivan Exp $ +# $Id: signup.cgi,v 1.29.2.3 2002-11-28 10:54:28 ivan Exp $  use strict;  use vars qw( @payby $cgi $locales $packages $pops $init_data $error @@ -260,9 +260,9 @@ if ( defined $cgi->param('magic') ) {    $address1 = '';    $address2 = '';    $city = ''; -  $state = ''; +  $state = $init_data->{statedefault};    $county = ''; -  $country = ''; +  $country = $init_data->{countrydefault};    $zip = '';    $daytime = '';    $night = ''; @@ -446,6 +446,123 @@ sub expselect {    $return;  } +#false laziness w/FS::cust_main_county +sub regionselector { +  my ( $selected_county, $selected_state, $selected_country, +       $prefix, $onchange ) = @_; + +  my $prefix = '' unless defined $prefix; + +  my $countyflag = 0; + +  my %cust_main_county; + +#  unless ( @cust_main_county ) { #cache  +    #@cust_main_county = qsearch('cust_main_county', {} ); +    #foreach my $c ( @cust_main_county ) { +    foreach my $c ( @$locales ) { +      #$countyflag=1 if $c->county; +      $countyflag=1 if $c->{county}; +      #push @{$cust_main_county{$c->country}{$c->state}}, $c->county; +      #$cust_main_county{$c->country}{$c->state}{$c->county} = 1; +      $cust_main_county{$c->{country}}{$c->{state}}{$c->{county}} = 1; +    } +#  } +  $countyflag=1 if $selected_county; + +  my $script_html = <<END; +    <SCRIPT> +    function opt(what,value,text) { +      var optionName = new Option(text, value, false, false); +      var length = what.length; +      what.options[length] = optionName; +    } +    function ${prefix}country_changed(what) { +      country = what.options[what.selectedIndex].text; +      for ( var i = what.form.${prefix}state.length; i >= 0; i-- ) +          what.form.${prefix}state.options[i] = null; +END +      #what.form.${prefix}state.options[0] = new Option('', '', false, true); + +  foreach my $country ( sort keys %cust_main_county ) { +    $script_html .= "\nif ( country == \"$country\" ) {\n"; +    foreach my $state ( sort keys %{$cust_main_county{$country}} ) { +      my $text = $state || '(n/a)'; +      $script_html .= qq!opt(what.form.${prefix}state, "$state", "$text");\n!; +    } +    $script_html .= "}\n"; +  } + +  $script_html .= <<END; +    } +    function ${prefix}state_changed(what) { +END + +  if ( $countyflag ) { +    $script_html .= <<END; +      state = what.options[what.selectedIndex].text; +      country = what.form.${prefix}country.options[what.form.${prefix}country.selectedIndex].text; +      for ( var i = what.form.${prefix}county.length; i >= 0; i-- ) +          what.form.${prefix}county.options[i] = null; +END + +    foreach my $country ( sort keys %cust_main_county ) { +      $script_html .= "\nif ( country == \"$country\" ) {\n"; +      foreach my $state ( sort keys %{$cust_main_county{$country}} ) { +        $script_html .= "\nif ( state == \"$state\" ) {\n"; +          #foreach my $county ( sort @{$cust_main_county{$country}{$state}} ) { +          foreach my $county ( sort keys %{$cust_main_county{$country}{$state}} ) { +            my $text = $county || '(n/a)'; +            $script_html .= +              qq!opt(what.form.${prefix}county, "$county", "$text");\n!; +          } +        $script_html .= "}\n"; +      } +      $script_html .= "}\n"; +    } +  } + +  $script_html .= <<END; +    } +    </SCRIPT> +END + +  my $county_html = $script_html; +  if ( $countyflag ) { +    $county_html .= qq!<SELECT NAME="${prefix}county" onChange="$onchange">!; +    $county_html .= '</SELECT>'; +  } else { +    $county_html .= +      qq!<INPUT TYPE="hidden" NAME="${prefix}county" VALUE="$selected_county">!; +  } + +  my $state_html = qq!<SELECT NAME="${prefix}state" !. +                   qq!onChange="${prefix}state_changed(this); $onchange">!; +  foreach my $state ( sort keys %{ $cust_main_county{$selected_country} } ) { +    my $text = $state || '(n/a)'; +    my $selected = $state eq $selected_state ? 'SELECTED' : ''; +    $state_html .= "\n<OPTION $selected VALUE=$state>$text</OPTION>" +  } +  $state_html .= '</SELECT>'; + +  $state_html .= '</SELECT>'; + +  my $country_html = qq!<SELECT NAME="${prefix}country" !. +                     qq!onChange="${prefix}country_changed(this); $onchange">!; +  my $countrydefault = $init_data->{countrydefault} || 'US'; +  foreach my $country ( +    sort { ($b eq $countrydefault) <=> ($a eq $countrydefault) or $a cmp $b } +      keys %cust_main_county +  ) { +    my $selected = $country eq $selected_country ? ' SELECTED' : ''; +    $country_html .= "\n<OPTION$selected>$country</OPTION>" +  } +  $country_html .= '</SELECT>'; + +  ($county_html, $state_html, $country_html); + +} +  sub success_default { #html to use if you don't specify a success file    <<'END';  <HTML><HEAD><TITLE>Signup successful</TITLE></HEAD> diff --git a/fs_signup/FS-SignupClient/cgi/signup.html b/fs_signup/FS-SignupClient/cgi/signup.html index d89b6854b..724ffd7f8 100755 --- a/fs_signup/FS-SignupClient/cgi/signup.html +++ b/fs_signup/FS-SignupClient/cgi/signup.html @@ -28,26 +28,21 @@ Contact Information    <TH ALIGN="right"><font color="#ff0000">*</font>City</TH>    <TD><INPUT TYPE="text" NAME="city" VALUE="<%= $city %>"></TD>    <TH ALIGN="right"><font color="#ff0000">*</font>State/Country</TH> -  <TD><SELECT NAME="state" SIZE="1"> - -  <%= -    foreach ( @{$locales} ) { -      $OUT .= '<OPTION'; -      $OUT .= ' SELECTED' if ( $state eq $_->{'state'} -                               && $county eq $_->{'county'} -                               && $country eq $_->{'country'} -                             ); -      $OUT .= '>'. $_->{'state'}; -      $OUT .= ' ('. $_->{'county'}. ')' if $_->{'county'}; -      $OUT .= ' / '. $_->{'country'}; -    } -  %> - -  </SELECT></TD> +  <TD> +    <%= +        ($county_html, $state_html, $country_html) = +          regionselector( $county, $state, $country ); +  +        "$county_html $state_html"; +    %> +  </TD>    <TH><font color="#ff0000">*</font>Zip</TH>    <TD><INPUT TYPE="text" NAME="zip" SIZE=10 VALUE="<%= $zip %>"></TD>  </TR>  <TR> +  <TH ALIGN="right"><font color="#ff0000">*</font>Country</TH> +  <TD><%= $country_html %></TD> +<TR>    <TD ALIGN="right">Day Phone</TD>    <TD COLSPAN=5><INPUT TYPE="text" NAME="daytime" VALUE="<%= $daytime %>" SIZE=18></TD>  </TR> | 
