#!/usr/bin/perl5 # use strict; require "/usr/local/apache/cgi-bin/taima.pl"; # ------------------------------------ my $FORM_QUERY = 'haisou_fq.tmpl'; my $FORM_CONFIRM = 'haisou_fc.tmpl'; my $FORM_MAIL = 'haisou_fm.tmpl'; my $MAIL_SUBJECT = '陀羅尼助のお申し込み(i-mode)'; my $DONE_LOCATION = 'http://www.taimadera-nakanobo.or.jp/i/kanryou.htm'; # ------------------------------------ my $TimeTable = { '' => '希望なし', '1' => '午前中', '2' => '12−14時', '3' => '14−16時', '4' => '16−18時', '5' => '18時−20時', '6' => '20−21時' }; sub get_form($) { ($field) = @_; # my $buf; if ($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $buf, $ENV{'CONTENT_LENGTH'}); } else { $buf = $ENV{'QUERY_STRING'}; } my @args = split(/&/, $buf); foreach $arg (@args) { ($lab, $val) = split(/=/, $arg); $lab =~ s/\+/ /g; $lab =~ s/%([0-9a-f][0-9a-f])/pack('c', hex($1))/egi; jcode::convert(*lab, 'euc'); $val =~ s/\+/ /g; $val =~ s/%([0-9a-f][0-9a-f])/pack('c', hex($1))/egi; jcode::convert(*val, 'euc'); $field->{$lab} = $val; } } sub open_form($) { my ($afile) = @_; open(AFILE, "<$afile") or die("$0: $!"); my $atext, $aline; $atext .= $aline while ($aline = ); close(AFILE); jcode::convert(\$atext, 'euc'); return $atext; } sub htmlencode($) { my ($html) = @_; $html =~ s/&/&/g; $html =~ s/"/"/g; $html =~ s//>/g; return $html; } sub check_form($) { my ($field) = @_; my $mesg = []; push @$mesg, '「お名前」' if ($field->{'お名前'} eq ''); push @$mesg, '「郵便番号」' if ($field->{'郵便番号'} eq ''); push @$mesg, '「ご住所」' if ($field->{'ご住所'} eq ''); push @$mesg, '「お電話番号」' if ($field->{'お電話番号'} eq ''); push @$mesg, '「Eメール」' if ($field->{'Eメール'} eq ''); if ( (int $field->{'陀羅尼助(板)'} == 0) && (int $field->{'陀羅尼助丸(分包)'} == 0) && (int $field->{'陀羅尼助丸(瓶入)'} == 0) ) { push @$mesg, '「個数」'; } if (@$mesg > 0) { $field->{'mesg'} = join("
", @$mesg). 'の項目も入力してください'. "

"; } # return 0; return scalar(@$mesg); } sub setup_form($$) { my ($field, $tmpl) = @_; # foreach $key (keys %ENV) { $field->{$key} = $ENV{$key} } $field->{'陀羅尼助(板)'} = int $field->{'陀羅尼助(板)'}; $field->{'陀羅尼助丸(分包)'} = int $field->{'陀羅尼助丸(分包)'}; $field->{'陀羅尼助丸(瓶入)'} = int $field->{'陀羅尼助丸(瓶入)'}; foreach $key (keys %$TimeTable) { $field->{'時間帯_KEY_'. $key} = $key; $field->{'時間帯_VAL_'. $key} = $TimeTable->{$key}; } $field->{'時間帯_CHK_'. $field->{'時間帯'}} = ' checked'; $field->{'時間帯_VAL'} = $field->{'時間帯_VAL_'. $field->{'時間帯'}}; my $rs = open_form($tmpl); $rs =~ s/&([a-zA-Z0-9_\x80-\xff]+)&/$field->{$1}/gei; $rs =~ s/%([a-zA-Z0-9_\x80-\xff]+)%/htmlencode($field->{$1})/gei; return $rs; } sub mail_form($$) { my ($field, $tmpl) = @_; # $field->{'MAIL_SUBJECT'} = mimeencode($MAIL_SUBJECT); $field->{'MAIL_RECIPIENT'} = $MAIL_RECIPIENT; my $rs = setup_form($field, $tmpl); jcode::convert(\$rs, 'jis'); open(MAIL, "| $SENDMAIL $MAIL_RECIPIENT") or die("$0: $!"); print MAIL $rs; close(MAIL); return undef; } # main { $field = {}; get_form($field); my $rs; if ($ENV{'REQUEST_METHOD'} ne 'POST') { $rs = setup_form($field, $FORM_QUERY); } elsif (check_form($field) == 0) { if ($field->{'stat'} eq 'done') { $rs = mail_form($field, $FORM_MAIL); } else { # 確認画面の表示 $rs = setup_form($field, $FORM_CONFIRM); } } else { # 未入力項目あり => 再入力画面 $rs = setup_form($field, $FORM_QUERY); } if (defined $rs) { print "Content-Type: text/html; charset=Shift_JIS\n\n"; jcode::convert(\$rs, 'sjis'); print $rs; } else { print "Location: $DONE_LOCATION\n\n"; } }