#!/usr/bin/perl

#=======================================================================================
#			   Design Form System                                                  Version 3.87
#				                                                                   Script by HAL
#                                                                 Last Update 2006.01.29
#=======================================================================================
require 'preset.cgi';
$systeminfo = '<a href="http://www.gnbnet.com/" target="_blank">DesignForm (Ver 3.8)</a>';
$cgi_file = 'index.cgi';

	if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); }
	else { $buffer = $ENV{'QUERY_STRING'}; }
	if($buffer eq ""){ &fst; } # 初期HTML表示
	@pairs = split(/&/,$buffer);
	foreach $pair (@pairs)
	{
		($name, $value) = split(/=/, $pair);
		$name =~ s/\+/ /g;
		$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
		$value =~ s/\+/ /g;
		$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;

		$value =~ s/<!--#(.|\n)*-->//g;
		$value =~ s/<!--(.|\n)*-->//g;

		#改行マークを\nに統一
		$value =~ s/\r\n/\n/g;
		$value =~ s/\r/\n/g;

		&jcode'convert(*name,'sjis');
		&jcode'convert(*value,'sjis');
		
		push(@NAMES,$name);
		push(@VALUES,$value);
	}
	
	$i = 0;
	foreach $name_w (@NAMES){
		($name_w2,$dmy) = split(/ \//,$name_w);
		if($name_w eq "preview" && $VALUES[$i] eq "on"){ &preview; }
		if($name_w eq "re_code" && $VALUES[$i] eq "on"){ $re_code = "on"; }
		#オプション指定：/S /M /W
			if($name_w =~ m/ \/s/i && $VALUES[$i] ne ""){ $subject = $VALUES[$i]; }
			if($name_w =~ m/ \/m/i && $VALUES[$i] ne ""){ $email = $VALUES[$i]; }
			if($name_w =~ m/ \/w/i && $VALUES[$i] ne ""){ $email_w = $VALUES[$i]; }
			if($name_w =~ m/ \/a/i && $VALUES[$i] eq ""){ &fst("必須項目をすべて入力してください。"); }
		if($email ne "" && !( $email =~ /^[0-9a-zA-Z-_.]+@[0-9a-zA-Z-_.]+$/ )){ &fst('メールアドレスが不正です。'); }
		$i++;
	}
	if($email_ck == 1 && $email ne $email_w){ &fst('メールアドレスが一致しません。'); }

	# 時間取得
		$ENV{'TZ'} = "JST-9";
		@date = localtime(time);
		$date[5] += 1900;
		$date[4] = sprintf("%02d",$date[4] + 1);
		$date[3] = sprintf("%02d",$date[3]);
		$date[2] = sprintf("%02d",$date[2]);
		$date[1] = sprintf("%02d",$date[1]);
		$date[6] = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat') [$date[6]];
		$nowtime = "$date[5]/$date[4]/$date[3] ($date[6]) $date[2]:$date[1]";

	#送信メッセージ生成
	open(USR,"$user_tmp") || &error('ファイルオープンに失敗しました - user');
	@utmps = <USR>;
	close(USR);
	$msgw = "";
	foreach $line (@utmps) {
		$line =~ s/<!--email-->/$email/g;
		$msgw .= $line;
	}
	open(MST,"$master_tmp") || &error('ファイルオープンに失敗しました - master');
	@mtmps = <MST>;
	close(MST);
	$msg = "";
	# リモートホストを取得（取得できなかった場合はADDRから取得）
	if($ENV{'REMOTE_HOST'} ne ""){ $remote = $ENV{'REMOTE_HOST'}; }
	else {
		use Socket;
		$add = inet_aton($ENV{'REMOTE_ADDR'});
		$remote = gethostbyaddr($add,&AF_INET);
	}
	require $plat_pl;
	($platform, $platform_v, $browser, $browser_v) = &User_Agent($ENV{'HTTP_USER_AGENT'});
	foreach $line (@mtmps) {
		$line =~ s/<!--email-->/$email/g;
		$line =~ s/<!--host-->/$remote/g;
		$line =~ s/<!--ip-->/$ENV{'REMOTE_ADDR'}/g;
		$line =~ s/<!--platform-->/$platform $platform_v/g;
		$line =~ s/<!--browser-->/$browser $browser_v/g;
		$line =~ s/<!--time-->/$nowtime/g;
		$msg .= $line;
	}
	$i = 0;
	foreach $name_w (@NAMES){
		($name_w2,$dmy) = split(/ \//,$name_w);
		$msg =~ s/<!--\Q$name_w2-->/$VALUES[$i]/g;
		$msgw =~ s/<!--\Q$name_w2-->/$VALUES[$i]/g;
		$i++;
	}
	
	$msg =~ s/<!--.*-->//g;
	$msgw =~ s/<!--time-->/$nowtime/g;
	$msgw =~ s/<!--.*-->//g;
	&mail; # メール送信
	if($re_code eq "on" && $email ne ""){ $email_copie = "【$email】にも送信内容のコピーをお送りいたしました。"; }else{ $email_copie = ""; }
	&jcode'convert(*email_copie,'sjis');
	open(HTML,"$location_file") || &error('ファイルオープンに失敗しました - thanks');
	@html = <HTML>;
	close(HTML);
	$htmlw = "";
	foreach (@html) { $htmlw .= $_; }
	&jcode'convert(*msgw,'sjis');
	$msgw =~ s/\n/<br>/g;
	$htmlw =~ s/<!--email_copie-->/$email_copie/g;
	$htmlw =~ s/<!--message-->/$msgw/g;
	$htmlw =~ s/<!--system-->/$systeminfo/g;
	print "Content-Type: text/html\n\n";
	print "<!DOCTYPE HTML PUBLIC -//IETF//DTD HTML//EN>\n";
	print $htmlw;
	exit;

#================================初期表示画面=================================
sub fst{
	$e_msg = $_[0];
	&jcode'convert(*e_msg,'sjis');
	open(HTM,"$design_file") || &error('FILE OPEN ERROR - design');
	@html = <HTM>;
	close(HTM);
	$htmlw = "";
	foreach (@html) { $htmlw .= $_; }
	$htmlw =~ s/<!--cgi-->/$cgi_file/g;
	$htmlw =~ s/<!--e_msg-->/$e_msg/g;
	$htmlw =~ s/<!--system-->/$systeminfo/g;
	$i = 0;
	foreach $name_w (@NAMES){
		($name_w2,$dmy) = split(/ \//,$name_w);
		$htmlw =~ s/<!--\Q$name_w2-->/$VALUES[$i]/g;
		$i++;
	}
	$htmlw =~ s/<!--.*-->//g;
	print "Content-Type: text/html\n\n";
	print "<!DOCTYPE HTML PUBLIC -//IETF//DTD HTML//EN>\n";
	print $htmlw;
	exit;
}

#================================プレビュー画面=================================
sub preview{
	open(PRE,"$pre_file") || &error('FILE OPEN ERROR - preview');
	@html = <PRE>;
	close(PRE);
	$htmlw = "";
	foreach (@html) { $htmlw .= $_; }
	$i = 0; $hidden = "";
	foreach $name_w (@NAMES){
		($name_w2,$dmy) = split(/ \//,$name_w);
		if($name_w ne "preview" && !($name_w =~ m/ \/h/i)){
			$vls = $VALUES[$i];
			$vls =~ s/\r\n/<br>/g;
			$vls =~ s/\r/<br>/g;
			$vls =~ s/\n/<br>/g;
			$htmlw =~ s/<!--\Q$name_w2-->/$vls/g;
		}
		if($name_w ne "preview"){
			$VALUES[$i] =~ s/\"/&Prime;/g;
			$hidden .= "<input type=\"hidden\" name=\"$name_w\" value=\"$VALUES[$i]\">\n"
		}
		#オプション指定：/S /M /W
			if($name_w =~ m/ \/s/i && $VALUES[$i] ne ""){ $subject = $VALUES[$i]; }
			if($name_w =~ m/ \/m/i && $VALUES[$i] ne ""){ $email = $VALUES[$i]; }
			if($name_w =~ m/ \/w/i && $VALUES[$i] ne ""){ $email_w = $VALUES[$i]; }
			if($name_w =~ m/ \/a/i && $VALUES[$i] eq ""){ &fst("必須項目をすべて入力してください。"); }
		if($email ne "" && !( $email =~ /^[0-9a-zA-Z-_.]+@[0-9a-zA-Z-_.]+$/ )){ &fst('メールアドレスが不正です。'); }
		$i++;
	}
	if($email_ck == 1 && $email ne $email_w){ &fst('メールアドレスが一致しません。'); }
	$htmlw =~ s/<!--cgi-->/$cgi_file/g;
	$htmlw =~ s/<!--hidden-->/$hidden/g;
	$htmlw =~ s/<!--system-->/$systeminfo/g;
	print "Content-Type: text/html\n\n";
	print "<!DOCTYPE HTML PUBLIC -//IETF//DTD HTML//EN>\n";
	print $htmlw;
	exit;
}

#================================メール転送処理=================================
sub mail{
	$refw = $ENV{'HTTP_REFERER'};
	if($script_url ne "" && $refw !~ m/$script_url/i){ &error('不正なURLからのアクセスです。'); }
	if ($email eq ''){ $emailw = @mailtos[0]; }else{ $emailw = $email; }
	&jcode'convert(*subject,'jis');
	&jcode'convert(*msg,'jis');
	&jcode'convert(*msgw,'jis');

	foreach $mlw (@mailtos){
		$mailtow = $mlw;
	if (!open(MAIL,"| $sendmail $mailtow")) { &error('何らかの原因で送信できませんでした。'); }
		print MAIL "X-Mailer: $systeminfo\n";
		print MAIL "To: $mailtow\n";
		print MAIL "From: $emailw\n";
		print MAIL "Subject: $subject\n";
		print MAIL "Content-Transfer-Encoding: 7bit\n";
		print MAIL "Content-Type: text/plain\; charset=\"ISO-2022-JP\"\n\n";
		print MAIL "$msg";
		close(MAIL);
	}
	
	# 送信者にメール送信
	if($email ne "" && $re_code eq "on"){
		if($email_rtn_ck == 1){ $rtnml = @mailtos[0]; }else{ $rtnml = $email; }
		if (!open(MAIL,"| $sendmail $email")) { &error('何らかの原因で送信できませんでした。'); }
			print MAIL "X-Mailer: $systeminfo\n";
			print MAIL "To: $email\n";
			print MAIL "From: $rtnml\n";
			print MAIL "Subject: $subject\n";
			print MAIL "Content-Transfer-Encoding: 7bit\n";
			print MAIL "Content-Type: text/plain\; charset=\"ISO-2022-JP\"\n\n";
			print MAIL "$msgw";
			close(MAIL);
	}
}

#================================エラー処理=================================
sub error {
	$error = $_[0];
	if ($error eq "") { $error = '原因不明のエラーで処理を継続できません。'; }
	&jcode'convert(*error,'sjis');
	open(HTML,"$error_file") || die "FILE OPEN ERROR - error";
	@html = <HTML>;
	close(HTML);
	print "Content-Type: text/html\n\n";
	print "<!DOCTYPE HTML PUBLIC -//IETF//DTD HTML//EN>\n";
	foreach $line (@html) {
		$line =~ s/<!--error-->/$error/g;
		$line =~ s/<!--system-->/$systeminfo/g;
		print $line;
	}
	exit;
}
