#!/usr/local/bin/perl

#------------------------------------------------------------------------------------
# ショッピングバスケット用消去ルーチン入り
# このメール送信ＣＧＩはショッピングバスケット専用としてご利用ください。
# そうすれば、注文メール送信後に選択してあったバスケットの中身が消去できます。
#------------------------------------------------------------------------------------

;# WebFORM v4.3 is Free. (SJIS仕様)
;#  (c)CGI-RESCUE

;# Hostory
;# 06/Jun/1998 v3.0 セキュリティ強化
;# 08/Aug/1998 v3.1 カーボンコピー処理改善
;# 29/Oct/1998 v4.0 カーボンコピー処理はセキュリティの問題で廃止
;# 26/Jul/2000 v4.1 メールヘッダ記述の修正
;# 14/Nov/2001 v4.2 一部更新
;# 01/Apr/2002 v4.3 最終確認で注文しない場合のリンクの不整合性を修正

#------ 初期設定 ----------------------------------------------------------

#■日本語コード変換ライブラリ
require 'jcode-211.pl';

#■SENDMAILの設定
$sendmail = '/usr/lib/sendmail';

#■受信先メールアドレス
$mailto = 'メールアドレス';

#■名称
$title = 'ＷｅｂＦＯＲＭ';

#■ホームページ
$homepage = 'http://ホームページ/';

#■処理画面のボディ設定
$body = '<body bgcolor="#ffffff">';

#■記入者申告メールアドレス( name="email"の時 )未入力でも送信する  1:する 0:しない
$mailcheck = 0;

#--------------------------------------------------------------------------

#時刻取得
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
@wday_array = ('SUN','MON','TUE','WED','THU','FRI','SAT');
$date_now = sprintf("%04d/%02d/%02d(%s) %02d:%02d:%02d",$year +1900,$mon +1,$mday,$wday_array[$wday],$hour,$min,$sec);

#タイトル欄に入力がない場合のデフォルト値
$subject = "- NO SUBJECT -";

#データ入力
if ($ENV{'REQUEST_METHOD'} ne "POST") { &error('エラー','標準入力 METHOD=POST を設定してください.<br>&lt;form method=post action=........&gt;'); }
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
if ($buffer eq '') { &error('エラー','このＣＧＩは直接起動されません.'); }
$ref = $ENV{'HTTP_REFERER'};
$buffer2 = $ENV{'QUERY_STRING'};
if ($buffer2 ne '') { &error('エラー'); }

#デコード
@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {

	($name,$value) = split(/=/,$pair);
	$value =~ tr/+/ /;
	$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
	$name =~ tr/+/ /;
	$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;

	&jcode'convert(*name,'sjis');
	&jcode'convert(*value,'sjis');

	if ($value =~ /\r\n/) { $value =~ s/\r//g; }
	elsif ($value =~ /\r/) { $value =~ s/\r/\n/g; }

	if ($name eq "location") { $lct = $value; }
	elsif ($name eq "c_copy" && $value eq "on") { $cc = "on"; }
	elsif ($name eq "no_check" && $value eq "on") { $nocheck = "on"; }
	elsif ($name eq "space_check" && $value eq "on") { $spcheck = "on"; }
	elsif ($name eq "no_check") { ; }
	elsif ($name eq "ref_url") { $ref_url = $value; }
	elsif ($name eq "confirm") { $confirm = $value; }
	elsif ($name eq "ref_name") { $ref_name = $value; }
	elsif ($name eq "subject" && $value ne "") { $subject = $value; }
	elsif ($name eq "subject") { ; }
	elsif ($name eq "ref_page") { $ref = $value; }
	elsif ($name eq "password") {

		$password = $value;
		push(@DATA_N,$name);
		push(@DATA_V,$value);
	}
	else {

		if ($name =~ /^EMAIL/i || $name =~ /^E-MAIL/i) {

			$value =~ s/　/ /g;
			if ($value =~ / / || $value =~ /;/) { $value = ""; }
			if (!($value =~ /(.*)\@(.*)\.(.*)/)) { $value = ""; }

			$email = $value;
		}

		$value =~ s/\(\)//g;
		push(@DATA_N,$name); push(@DATA_V,$value);

		$name =~ s/\</&lt;/g; $value =~ s/\</&lt;/g;
		$name =~ s/\>/&gt;/g; $value =~ s/\>/&gt;/g;
		$name =~ s/\"/&quot;/g; $value =~ s/\"/&quot;/g;
		push(@DATA_NS,$name); push(@DATA_VS,$value);
	}
}

#入力チェック
if (!$confirm) { &error('ご注文いただけません','特商法による表示を読んで承諾されましたらチェックを入れてください.'); }
if ($mailcheck && $email eq '') { $email = 'anonymous@on.the.net'; }
if ($spcheck eq "on") {	foreach (@DATA_V) { if ($_ eq "") { &error('送信不可','受信者の意向により、全ての項目を埋めないと送信できません.'); } }}

if ($nocheck eq "on") { &sendmail; }

#最終確認画面出力
print "Content-type: text/html; charset=Shift_JIS\n\n";
print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n";
print "<html><head><title>$title</title>\n";
print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=x-sjis\">\n";
print <<"EOF";
<SCRIPT language="JavaScript">
<!--
SubmitCheck=false;
function Submit() {
	if(SubmitCheck==false){ SubmitCheck=true; document.Order.submit(); }
	else{ bottonAlert(); }
}
function bottonAlert() {
	Check = navigator.userAgent.indexOf(";");
	if(Check != -1 && navigator.userAgent.substring(Check+2,Check+10)=="MSIE 3.0") { alert("ボタンが２度押されましたので、再度実行してください。"); }
	else { alert("送信中ですのでお待ちください。"); }
}
function Kakunin() {

	if(SubmitCheck==false){ Submit(); }
	else { bottonAlert(); }
}
//-->
</SCRIPT>
</head>
EOF

print "$body\n";
print <<"EOF";
<h1>ご注文の最終確認です</h1>
<form method=POST action="webform.cgi" name="Order">
<table border=0 cellpadding=3 cellspacing=3>
<tr><td bgcolor="#ffcccc"><b><font size=+1>項目</font></b></td><td bgcolor="#ffcccc"><b><font size=+1>内容</font></b></td></tr>
EOF

$count = @DATA_NS;

foreach (0..$count-1) {

	print "<input type=hidden name=\"$DATA_NS[($_)]\" value=\"$DATA_VS[($_)]\">\n";
	print "<tr><td bgcolor=\"#ffeedd\">$DATA_NS[($_)] <br></td>";

	if ($DATA_VS[($_)] =~ /\n/) { print "<td bgcolor=\"#ffffff\"><pre>$DATA_VS[($_)]</pre></td></tr>\n"; }
	else { print "<td bgcolor=\"#ffffff\">$DATA_VS[($_)]</td></tr>\n"; }
	print "</td></tr>\n";
}

print "</table><p>\n";

if ($lct ne "") { print "<input type=hidden name=\"location\" value=\"$lct\">\n"; }

print "<input type=hidden name=\"no_check\" value=\"on\">\n";
print "<input type=hidden name=\"ref_page\" value=\"$ref\">\n";

if ($cc eq "on") { print "<input type=hidden name=\"c_copy\" value=\"on\">\n"; }
if ($ref_url ne "") { print "<input type=hidden name=\"ref_url\" value=\"$ref_url\">\n"; }
if ($ref_name ne "") { print "<input type=hidden name=\"ref_name\" value=\"$ref_name\">\n"; }
if ($subject ne "") { print "<input type=hidden name=\"subject\" value=\"$subject\">\n"; }
if ($password ne "") { print "<input type=hidden name=\"password\" value=\"$password\">\n"; }
if ($confirm) { print "<input type=hidden name=\"confirm\" value=\"$confirm\">\n"; }

if ($email eq '') { print "<b>申\込者Ｅメールを入力しないと送信できません</b><p>\n"; }
else {

print <<"EOF";
<SCRIPT>
<!--
document.write("<input type=button value='   → 注 文 す る    ' onClick='Kakunin()'><p>\\n");
// -->
</SCRIPT>
<NOSCRIPT>
<b>ご注文には、JavaScriptを有効にした対応ブラウザが必要です。</b><p>
○ Internet Explorer 5.0 の例<br> 
[ツール]→[インターネットオプション]→[セキュリティ] でゾーンを選択後 [レベルのカスタマイズ]→[スクリプト]→[アクティブスクリプト] を[有効]に設定。<br>
○ Netscape Navigator 4.73 の例<br> 
[編集]→[設定]→[詳細]→[JavaScript を有効にする]<br>
○ その他のブラウザは発売元にお問い合わせください。
</NOSCRIPT>
EOF

}

print "</form>\n";
print "<h3>[<a href=\"$homepage\">×注文しない</a>] [<a href=\"JavaScript:history.back()\">←訂正する</a>]</h3><hr>\n";
print "<i>お問い合わせ先 <a href=\"mailto:$mailto\">$mailto</a><i>\n";
print "<p></body></html>\n";
exit;

sub sendmail {

	if (!open(OUT,"| $sendmail -t")) { &error('システム異常','申し訳ありませんが何らかの原因で処理できません.'); }

	print OUT "X-Mailer: MiniCARGO by CGI-RESCUE\n";
	print OUT "X-HTTP-REFERER: $ref\n";
	print OUT "Errors-To: $mailto\n";
	print OUT "To: $mailto\n";
	print OUT "From: $email\n";
	&jis("Subject: $subject"); print OUT "$msg\n";
	print OUT "Content-Transfer-Encoding: 7bit\n";
	print OUT "Content-Type: text/plain\; charset=\"ISO-2022-JP\"\n\n\n";

	&jis("--- ここから ---"); print OUT "$msg\n\n";

	$count = @DATA_N;
	foreach (0..$count-1) {

		if ($DATA_V[$_] =~ /\n/) { &jis("$DATA_N[$_] =\n\n$DATA_V[$_]\n"); print OUT "$msg\n"; }
		else { &jis("$DATA_N[$_] = $DATA_V[$_]"); print OUT "$msg\n"; }
	}

	&jis("--- ここまで ---"); print OUT "\n$msg\n\n";

	$host = $ENV{'REMOTE_HOST'};
	$addr = $ENV{'REMOTE_ADDR'};
	if ($host eq $addr) { $host = gethostbyaddr(pack('C4',split(/\./,$host)),2) || $addr; }

	print OUT "\n";
	print OUT "----------------------------------------\n";
	print OUT "Processed         : $date_now\n";
	print OUT "Server-Name       : $ENV{'SERVER_NAME'}\n";
	print OUT "Server-Protocol   : $ENV{'SERVER_PROTOCOL'}\n";
	print OUT "Server-Port       : $ENV{'SERVER_PORT'}\n";
	print OUT "Gateway-Interface : $ENV{'GATEWAY_INTERFACE'}\n";
	print OUT "Request-Method    : $ENV{'REQUEST_METHOD'}\n";
	print OUT "Script-Name       : $ENV{'SCRIPT_NAME'}\n";
	print OUT "HTTP-Referer      : $ref\n";
	print OUT "HTTP-User-Agent   : $ENV{'HTTP_USER_AGENT'}\n";
	print OUT "Remote-host       : $host\n";
	print OUT "Remote-Addr       : $ENV{'REMOTE_ADDR'}\n";
	print OUT "----------------------------------------\n";
	print OUT "\n";

	close(OUT);

#------------------------------------------------------------------------------------
# ショッピングバスケット用消去ルーチン
#------------------------------------------------------------------------------------

$cookies = $ENV{'HTTP_COOKIE'};

@cookie_pairs = split(/;/,$cookies);
foreach $cookie_pair (@cookie_pairs) {

	($name, $value) = split(/=/, $cookie_pair);
	$name =~ s/ //g;
	$DUMMY{$name} = $value;
}

foreach $goods_num (1 .. $#cookie_pairs + 1) {

	$cookie_name = 'CARGO_'.$goods_num;
	if ($DUMMY{$cookie_name} =~ /^goods:/ || $DUMMY{$cookie_name} =~ /^removed/) { $GOODS[$goods_num] = $DUMMY{$cookie_name}; }
}

foreach $j (1 .. $#GOODS + 1) {

	if ($GOODS[$j] =~ /^removed/i || $GOODS[$j] eq '') { next; }
	elsif ($GOODS[$j] =~ /^goods/) { print "Set-Cookie: CARGO_$j=removed;\n"; }
}

#------------------------------------------------------------------------------------

	if ($cc eq "on" && $lct ne '') {

		print "Content-type: text/html; charset=Shift_JIS\n\n";
		print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n";
		print "<html><head><title>$title</title>\n";
		print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=x-sjis\"></head>\n";
		print "$body\n";
		print "<h1>送信完了</h1>\n";
		print "ただ今<a href=\"mailto:$mailto\">$mailto</a>宛てに送信された内容は以下の通りです.<br>\n";
		print "内容の写しとしてお控えください.<p>\n";
		print "<form>\n";
		print "<blockquote>\n";
		print "<textarea cols=70 rows=20>";
		&cc;
		print "</textarea></form></blockquote><p>\n";
		print "<h3>[<a href=\"$lct\" target=\"_top\">コピーしたら次へ</a>]</h3>";
	}
	elsif ($cc eq "on") {

		print "Content-type: text/html; charset=Shift_JIS\n\n";
		print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n";
		print "<html><head><title>$title</title>\n";
		print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=x-sjis\"></head>\n";
		print "$body\n";
		print "<h1>送信完了</h1>\n";
		print "ただ今<a href=\"mailto:$mailto\">$mailto</a>宛てに送信された内容は以下の通りです.<br>\n";
		print "内容の写しとしてお控えください.<p>\n";
		print "<form>\n";
		print "<blockquote>\n";
		print "<textarea cols=70 rows=20>";
		&cc;
		print "</textarea></form></blockquote><p>\n";
		if ($ref_url ne '' && $ref_name ne '') { &jcode'convert(*ref_name,'sjis'); print "<h3>[<a href=\"$ref_url\" target=\"_top\">$ref_name</a>]</h3>"; }
		print "</body></html>\n";
	}
	elsif ($lct ne '') { print "Location: $lct\n\n"; }
	else {
		print "Content-type: text/html; charset=Shift_JIS\n\n";
		print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n";
		print "<html><head><title>$title</title>\n";
		print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=x-sjis\"></head>\n";
        	print "$body\n";
		print "<H1>送信完了</H1>\n";
		print "ご記入されたものは<a href=\"mailto:$mailto\">$mailto</a>宛てに電子メールされました.<br>\n";
		print "Thank you for sending comments to $mailto .<p>\n";
		if ($ref_url ne '' && $ref_name ne '') { &jcode'convert(*ref_name,'sjis'); print "<h3>[<a href=\"$ref_url\" target=\"_top\">$ref_name</a>]</h3>"; }
		print "<p></body></html>\n";
	}
	exit;
}

sub cc {

	print "X-Processed: $date_now\n";
	print "X-HTTP_REFERER: $ref\n";
	print "X-HTTP-User-Agent: $ENV{'HTTP_USER_AGENT'}\n";
	print "X-Remote-host: $host \[$ENV{'REMOTE_ADDR'}\]\n";
	print "To: $mailto\n";
	print "Subject: $subject\n\n";

	foreach (0..$count-1) {

		if ($DATA_VS[$_] =~ /\n/) { print "$DATA_NS[$_] =\n\n$DATA_VS[$_]\n"; }
		else { print "$DATA_NS[$_] = $DATA_VS[$_]\n"; }
	}
}

sub jis { $msg = $_[0]; &jcode'convert(*msg, 'jis'); }

sub error {

	print "Content-type: text/html; charset=Shift_JIS\n\n";
	print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n";
        print "<html><head><title>$title</title>\n";
	print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=x-sjis\"></head>\n";
        print "$body\n";
        print "<h1>$_[0]</h1>\n";
	print "<h3>$_[1]</h3>\n";

	if ($ref eq '') {

		print "※ フォームページが取得できません.<br>\n";
		print "※ セキュリティソフトをご使用になっている場合に注文できない場合があります.<br>\n";
		print "※ ブラウザの[戻る]ボタンを押して前の画面に移動してください.<p>\n";
	}
	else {
		print "※ <a href=\"JavaScript:history.back()\">買い物かごに戻る</a>か、ブラウザの[戻る]ボタンを押して前の画面に移動してください.<p>\n";
	}

	print "<p></body></html>\n";
	exit;
}
