#!/usr/bin/perl
#--NetShopOwner-CGI-version:4.2.5.5--

;#
;# support3.cgi
;# [PC]お問い合わせ完了画面
;# Copyright (c) 2004- Increment P Corp. All rights reserved.
;#
;# 2009/09/30 NSO4対応
;#

use strict;
use uselib;
use defnsopath_shop;
use NsoVersionPC 1.00;
use NsoMail;
use Lib::SiteStatus;
use Design::NsoMailBody;
use DB::NsoSupportDB;

&ReadParse();
my %in    = %main::in;
my %incfn = %main::incfn;
my %inct  = %main::inct;

# インスタンス定義
my $objConfigSystem = Config::NsoSystem->newShop();
my $objConfigMaster = Config::NsoMaster->new();
my $NsoMisc       = NsoMisc->new();
my $NsoSupportDB    = NsoSupportDB->new();

# コンフィグレーションのキャッシュ
my %ConfigSystem = $objConfigSystem->cache_config();
my %ConfigMaster = $objConfigMaster->cache_config();

my $status_err;

FUNC:{
	my $func = $in{func} || 'main';
	my %function = (
		main       => \&main,
	);
	
	&check_request_method();
	&check_http_referer();
	&check_closing();
	
	if ($function{$func}){
		$function{$func}->();
	}else{
		&main();
	}
}
exit();

;#
;# リクエストメソッド検査
;#
sub check_request_method {
	unless ($ENV{REQUEST_METHOD} eq 'POST'){
		my $Support1URL = $ConfigSystem{base_href}{cgishop}.$ConfigSystem{shop_script_name}{support1};
		print $NsoMisc->redirect( $NsoMisc->getChangedURL({url=>$Support1URL, key=>'AfterCart'}) );
		exit();
	}
}

;#
;# HTTP_REFERER検査
;# 
;#
sub check_http_referer {
	return if( !$ConfigSystem{Default}{Referer}{Check} );
	
	my $cgiroot = $NsoMisc->getChangedURL({url=>$ConfigSystem{base_href}{cgishop}, key=>'AfterCart'});
	my $Support1URL = $ConfigSystem{base_href}{cgishop}.$ConfigSystem{shop_script_name}{support1};
	
	unless ($ENV{HTTP_REFERER} =~ /$cgiroot/i){
		print $NsoMisc->redirect( $NsoMisc->getChangedURL({url=>$Support1URL, key=>'AfterCart'}) );
		exit();
	}
}

;#
;# 開店・閉店状態検査
;#
sub check_closing {
	my $SiteStatus = Lib::SiteStatus->new({ ConfigSystem=>\%ConfigSystem });
	$SiteStatus->CheckClosing({ IgnoreFlag=>1 });
}

;#
;# メイン処理
;#
sub main {
	
	# メール送信
	&mail_send;
	
	my %htmls = ();
	$htmls{status_err} = $status_err;
	
	# HTMLタグ無効化
	my %Text = ();
	foreach my $key ( keys( %in) ) {
		$Text{$key} = $NsoMisc->html_encode($in{$key});
	}

	# HTMLで表示できるように
	$htmls{Inquiry} = $Text{Inquiry};
	$htmls{Inquiry} =~ s/[\n]/<BR>/ig; 

	my %replace_templ = (
		Text    => \%Text,
		htmls   => \%htmls,
	);

	print $NsoMisc->print_header();
	
	# テンプレート置換
	my $system_templ_dir   = $main::nsoDB_path ."/";
	my $system_templ_kind  = "templ";
	my $Data = "support3.htmp";
	my $NsoTempl = NsoTempl->new({ DataDir=>$system_templ_dir, DirKind=>$system_templ_kind, Data=>$Data });
	print $NsoTempl->replace_templ(\%replace_templ);
	exit();
}

;#
;# メール送信
;#
sub mail_send {
	
	# 問合せ日時
	my @date = ();
	push(@date, 
		join("/", unpack("a4a2a2", $NsoMisc->get_date({ type=>'yyyymmdd' }))),
		join(":", unpack("a2a2a2", $NsoMisc->get_date({ type=>'hhmmss' })))
	);
	my $RegistDate = join(" ", @date);
	
	# 問合せID
	my $SupportID = $NsoSupportDB->make_SupportID();
	
	# メールデータ生成
	my @mailhead = (
		{ label=>q(問合せID), value=>$SupportID },
		{ label=>q(受付日時), value=>$RegistDate },
	);
	my @mailbody1 = (
		{ label=>q(お名前),, value=>$in{Name} },
		{ label=>q(e-mail),, value=>$in{Mail} },
		{ label=>q(件名), value=>$in{Subject} },
		{ label=>q(お問合せ内容), value=>q() }
	);
	# その他入力項目のデータ生成
	my @mailbody2 = ();
	my @nums = qw(1 2 3 4);
	foreach my $num (@nums){
		my $question = "question$num";
		my $question_title = "question$num"."_title";
		# 項目名が空のときは、データを生成しない。
		if ($in{$question_title} ne ""){
			push(@mailbody2, {label=>$in{$question_title}, value=>$in{$question} });
		}
	}
	
	my $SendmailPath = $ConfigSystem{sendmail}{path};
	my @err_list = ();
	
	# PCメール送信
	MAIL1:{
		my $NsoMailBody = Design::NsoMailBody->new();
		my @Head  = $NsoMailBody->PutInOrder({ bodylist=>\@mailhead });
		my @Body1 = $NsoMailBody->PutInOrder({ bodylist=>\@mailbody1 });
		my @Body2 = $NsoMailBody->PutInOrder({ bodylist=>\@mailbody2 });
		my $hr = q(─) x 36;
		my $BodyAll = join("\n", $hr, @Head, $hr, @Body1, "", $in{Inquiry}, @Body2, $hr);
		
		# Subjectの書式をあわせる。
		my $Subject = "[No." . $SupportID . "] $ConfigMaster{EachMaster}{Mail}{Support}{Subject}";
		
		# お問い合わせメールはPCのToにのみ送信
		my %args = (
			fromname => $in{Name},
			from     => $in{Mail},
			to       => $ConfigMaster{EachMaster}{Mail}{pc}{To},
			cc       => '',
			bcc      => '',
			subject  => $Subject,
			body     => $BodyAll,
		);
		
		my $NsoMail = NsoMail->new({ path=>$SendmailPath });
		unless ($NsoMail->send_mail(\%args)){
			my $err_str = "何らかの原因により問合せメールの送信に失敗しました";
			push(@err_list, $err_str);
		}
	};
	
	$status_err = join("<br>", @err_list) if (@err_list > 0);
}












