#!/usr/bin/perl
require 'cgi-lib0303.pl';
require 'jcode.pl';
require 'sub-lib.pl';
#use Pg;
$|=1;

#===========================================================#
#	hotcake04.pl	商品情報表示(パッケージ版)
#	
#	2000/01/25	By T.Murakami 初版
#	2000/07/20	By T.Murakami HotcakeVer2(PostgreSQL)対応
#	2001/01/20	By T.Murakami カート画面へのリンク対応
#
#===========================================================#

#===========================================================#
# メイン処理
#===========================================================#

	# メンテナンスフラグチェック
	&CheckMaintenanceFlg();

	# データベースへ接続
	&DBConnect();

	# 2003/02/24 Cookieオン／オフチェック
	&WriteCookie();

	# ブラウザから入力されたデータ取得
	&ReadData();

	# カート画面へＪｕｍｐ
	if( $GotoCart ne "" ){
		# カート画面へ
		require 'hotcake05.pl';
		exit;
	}
	# Shop.iniから在庫計算方法を取得する
	&GetStockInfo();

	# ファイルオープン
	&FielExistCheck();

	# 商品情報(詳細)表示
	&DisplayHTML();

#===========================================================#
# メイン終了
#===========================================================#


# サブルーチン
#-----------------------------------------------------------
# ブラウザから入力されたデータを取得サブルーチン
#
sub ReadData
{
	# POST時の処理
	if( $ENV{REQUEST_METHOD} eq "POST" ){
		# データ読込み
		&ReadParse( *ReadData );
		$HanyoID	  	= $ReadData{'HanyoID'};			# 製品ID
		$Kosuu			= $ReadData{ 'Kosuu' };			# 発注個数
#		$Stock			= $ReadData{ 'Stock' };			# 在庫数
		$CategoryName	= $ReadData{'CategoryName'};	# 大分類
		$GenreName 	  	= $ReadData{'GenreName'};		# 小分類
		$ViewCnt 	  	= $ReadData{'ViewCnt'};			# ViewCount
		$GotoCart 	  	= $ReadData{'GotoCart'};		# カート画面へボタン
		
	
		# "その他のバリエーション"が選択されたらエラー
		if( $HanyoID eq "NoSelect" ){
			&DisplayErrorHTML(hotcake04);
		}
	}

	# GETの処理
	if( $ENV{REQUEST_METHOD} eq "GET" ){
		$ViewCnt = 1;	# 1:デフォルト値
		@tmp = split( /&/,$ENV{QUERY_STRING} );
		foreach $str ( @tmp ){
			$str =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;
			($Item, $Value) = split( /=/, $str );
			if( $Item eq "HanyoID" ){
				$HanyoID = $Value;
			}
			if( $Item eq "ViewCnt" ){
				$ViewCnt = $Value;
			}
			if( $Item eq "SeihinName" ){
				$SeihinName = $Value;
			}
			if( $Item eq "Variation1" ){
				$Variation1 = $Value;
			}
			if( $Item eq "Variation2" ){
				$Variation2 = $Value;
			}
		}
	}
	# select用に文字コード変換
	$HanyoID_euc = $HanyoID;
	&jcode::convert( *HanyoID_euc, 'euc' );
	
}

#-----------------------------------------------------------
# ItemHTML表示(商品詳細情報)サブルーチン
#
sub FielExistCheck{

	# ItemHTML存在チェック
	if( !(-e $ItemHTML) ){
		&CgiDie( "\$ItemHTML not found. ");
	}
}

#-----------------------------------------------------------
# 商品詳細情報ＨＴＭＬ表示サブルーチン
#
sub DisplayHTML {

	# MIMEヘッダー出力
	print &PrintHeader;
	#
	# ItemHTML表示(商品詳細情報)
	#

	# 汎用情報取得
	&SetHanyouItem();

    open ItemHTML, "<$ItemHTML";		# 商品詳細情報ＨＴＭＬオープン
	while ( <ItemHTML> ) {
		&jcode::convert( *_, 'sjis' );

		# イメージ画像表示
		if ( /#ImagePath#/ ) {
			s/#ImagePath#/$ImagePath/;
		}
		# バリエーション設定(hidden) hotcake05.plへ渡す値
		if ( /#Variation#/ ) {
			s/#Variation#//;
			&SetVariation();
		}
		# 商品番号設定
		if ( /#ShouhinBangou#/ ) {
			s/#ShouhinBangou#/$SeihinBangou/;
		}
		# 商品名表示
		if ( /#ShouhinName#/ ) {
			s/#ShouhinName#/$SeihinName/;
		}
		# 選択されたバリエーション
		if ( /#ChoiceVariation#/ ) {
			s/#ChoiceVariation#/$ChoiceVariation/;
		}
		# コメント表示
		if ( /#Comment#/ ) {
			s/#Comment#//;
			&SetComment();
		}
		# 価格表示
		if ( /#Kakaku#/ ) {
			# 在庫管理を行う場合のみの処理
			# 金額(桁区切り)
			$Kakaku = reverse(join(",",(reverse($Kakaku) =~ /(\d{1,3})/g)));
			$Kakaku = sprintf("\%s",$Kakaku);
			if( $ini_Zaiko == 1 ){
				if( 0 >= $db_Stock ){
					s/#Kakaku#/$Kakaku  $SoldOutStr/;
				}else{
					s/#Kakaku#/$Kakaku/;
				}
			}else{
				s/#Kakaku#/$Kakaku/;
			}
		}
		# キャッチコピー表示
		if ( /#CatchCopy#/ ) {
			s/#CatchCopy#//;
			&SetCatchCopy();
		}
		# セールスポイント表示
		if ( /#SalesPoint#/ ) {
			s/#SalesPoint#//;
			&SetSalesPoint();
		}
		# 大分類 表示
		if (/#CategoryName#/) {
			s/#CategoryName#/$CategoryName/g;
		}
		# 小分類 表示
		if (/#GenreName#/) {
			s/#GenreName#/$GenreName/g;
		}
		# エンコード済大分類名 表示
		if (/#CategoryName-Enc#/) {
			my $EncCategoryName = &url_encode($CategoryName);
			s/#CategoryName-Enc#/$EncCategoryName/g;
		}
		# エンコード済小分類名 表示
		if (/#GenreName-Enc#/) {
			my $EncGenreName = &url_encode($GenreName);
			s/#GenreName-Enc#/$EncGenreName/g;
		}
		# ViewCount 表示
		if (/#ViewCnt#/) {
			s/#ViewCnt#/$ViewCnt/g;
		}
		# バリエーションプルダウン設定
		if (/#SetVariation#/) {
			s/#SetVariation#//g;
			&SetPulldownItem();
		}
		# バリエーションプルダウン設定
		if (/#INQUIRY#/) {
			s/#INQUIRY#//g;
			&SetInquiryButton();
		}

		print $_;
	}
	close ItemHTML;						# ジャンルＨＴＭＬクローズ
}

#-----------------------------------------------------------
# Variation設定サブルーチン
#
sub SetHanyouItem{
	
	# 表示情報取得
#	$strSQL_Sel = "select han.*, cat.*, com.*, sal.*
#				   from hanyo_tbl as han, catchcopy_tbl as cat, comment_tbl as com, salespoint_tbl as sal
#				   where han.hanyoid = '$HanyoID'
#				    and han.shohinname = com.shohinname
#				    and han.shohinname = cat.shohinname
#				    and han.shohinname = sal.shohinname";


	# 汎用テーブルから情報取得
	if ($HanyoID_euc ne ""){
		$strSQL_Sel = "select *
					   from hanyo_tbl
					   where hanyoid = '$HanyoID_euc'";
	}
	if ($SeihinName ne ""){
		&jcode::convert( *SeihinName, 'euc' );
		$strSQL_Sel = "select *
					   from hanyo_tbl
					   where ShohinName = '$SeihinName'";
		if($Variation1 ne ""){
			&jcode::convert( *Variation1, 'euc' );
			$strSQL_Sel .= " and Variation1 = '$Variation1'";
		}
		if($Variation2 ne ""){
			&jcode::convert( *Variation2, 'euc' );
			$strSQL_Sel .= " and Variation2 = '$Variation2'";
		}
		$strSQL_Sel .= " order by Variation1,Variation2";
					   
	}
	my $sth = $conn->prepare("$strSQL_Sel");
	$sth->execute();

=pod
	$result = $conn->exec("$strSQL_Sel");
	$db_ID = $result->getvalue($i,0);			# 商品名
	$db_SeihinNo = $result->getvalue($i,1);		# 製品番号
	$db_Stock = $result->getvalue($i,2);		# 在庫
	$db_Kakaku = $result->getvalue($i,3);		# 価格
	$db_Vari1 = $result->getvalue($i,4);		# バリエーション１
	$db_Vari2 = $result->getvalue($i,5);		# バリエーション２
	$db_Bunrui1 = $result->getvalue($i,8);		# 分類1(大分類)
	$db_Bunrui2 = $result->getvalue($i,9);		# 分類2(小分類)
	$db_LGif = $result->getvalue($i,12);		# Gifファイル名
	$db_LGifPath = $result->getvalue($i,13);	# Gifファイルパス
	$db_HanyoID = $result->getvalue($i,14);		# 汎用ID
=cut
	@row = $sth->fetchrow_array;

	$db_ID = $row[0];
	$db_SeihinNo = $row[1];		# 製品番号
	$db_Stock = $row[2];		# 在庫
	$db_Kakaku = $row[3];	# 価格
	$db_Vari1 = $row[4];		# バリエーション１
	$db_Vari2 = $row[5];		# バリエーション２
	$db_Bunrui1 = $row[8];		# 分類1(大分類)
	$db_Bunrui2 = $row[9];		# 分類2(小分類)
	$db_LGif = $row[12];		# Gifファイル名
	$db_LGifPath = $row[13];    # Gifファイルパス
	$db_HanyoID = $row[14];		# 汎用ID


	&jcode::convert( *db_ID, 'sjis' );
	&jcode::convert( *db_SeihinNo, 'sjis' );
	&jcode::convert( *db_Stock, 'sjis' );
	&jcode::convert( *db_Kakaku, 'sjis' );
	&jcode::convert( *db_Vari1, 'sjis' );
	&jcode::convert( *db_Vari2, 'sjis' );
	&jcode::convert( *db_Bunrui1, 'sjis' );
	&jcode::convert( *db_Bunrui2, 'sjis' );
	&jcode::convert( *db_LGif, 'sjis' );
	&jcode::convert( *db_LGifPath, 'sjis' );
	&jcode::convert( *db_HanyoID, 'sjis' );



	if ($HanyoID eq ""){
		$HanyoID = $db_HanyoID;
	}
	$CategoryName	= $db_Bunrui1;		# 大分類
	$GenreName 	  	= $db_Bunrui2;		# 小分類

	# select用に文字コード変換
	$db_ID_euc = $db_ID;
	&jcode::convert( *db_ID_euc, 'euc' );
	$db_HanyoID_euc = $db_HanyoID;
	&jcode::convert( *db_HanyoID_euc, 'euc' );


	# キャッチコピーテーブルから情報取得
	$strSQL_Sel = "select catcopy
				   from catchcopy_tbl
				   where shohinname = '$db_ID_euc'";
	my $sth = $conn->prepare("$strSQL_Sel");
	$sth->execute();
	@row = $sth->fetchrow_array;
	$db_Catcopy = $row[0];
=pod
	$result = $conn->exec("$strSQL_Sel");
	$db_Catcopy = $result->getvalue($i,0);		# キャッチコピー
=cut

	&jcode::convert( *db_Catcopy, 'sjis' );

	# コメントテーブルから情報取得
	$strSQL_Sel = "select comments
				   from comment_tbl
				   where shohinname = '$db_ID_euc'";

	my $sth = $conn->prepare("$strSQL_Sel");
	$sth->execute();
	@row = $sth->fetchrow_array;
	$db_Comment = $row[0];

=pod
	$result = $conn->exec("$strSQL_Sel");
	$db_Comment = $result->getvalue($i,0);		# コメント
=cut
	&jcode::convert( *db_Comment, 'sjis' );

	# セールスポイントテーブルから情報取得
	$strSQL_Sel = "select salespoint
				   from salespoint_tbl
				   where shohinname = '$db_ID_euc'";

	my $sth = $conn->prepare("$strSQL_Sel");
	$sth->execute();
	@row = $sth->fetchrow_array;
	$db_Salesp = $row[0];

=pod
	$result = $conn->exec("$strSQL_Sel");
	$db_Salesp = $result->getvalue($i,0);		# セールスポイント
=cut
	&jcode::convert( *db_Salesp, 'sjis' );


	# Gifファイル名
	$ImagePath = sprintf("%s%s", $db_LGifPath, $db_LGif);
	if ( !(-e $ImagePath) || $db_LGif eq "" ) {	# サムネイル画像が無い場合Default画像設定
		$ImagePath = "$DefaultIMGM";
	}
	$ImagePath = "../seihininfo/image-l/$db_LGif";
	
	# @Hanyou[4]〜[7](Variation)がある存在する場合は内容設定
	if ( $db_Vari1 ne "" or $db_Vari2 ne "" ) {
		# 選択バリエーションセット
		&SetChoiceVariation();
	}
	# 商品名表示
	$SeihinName = $db_ID;
	# 商品番号設定
	$SeihinBangou = $db_SeihinNo;
	# 価格表示
	$Kakaku = $db_Kakaku;
	# コメント
	@CommentStr = split( /,/,$db_Comment );
	# キャッチコピー表示
	@CatchCopyStr = split( /,/,$db_Catcopy );
	# セールスポイント表示
	@SalespointStr = split( /,/,$db_Salesp );
}

#-----------------------------------------------------------
# Variation設定サブルーチン
#
sub SetVariation{

	# Variation情報設定
	print "<INPUT TYPE=hidden NAME=\"HanyoID\" VALUE=\"$HanyoID\">\n";			# 汎用ID
	print "<input type=hidden name=\"Stock\" value=\"$db_Stock\">\n";			# 小分類

	print "<input type=hidden name=CategoryName value=\"$CategoryName\">\n";	# 大分類
	print "<input type=hidden name=GenreName value=\"$GenreName\">\n";			# 小分類
	print "<input type=hidden name=ViewCnt value=\"$ViewCnt\">\n";				# ViewCount
}

#-----------------------------------------------------------
# コメント表示サブルーチン
#
sub SetComment {

	foreach $Str ( @CommentStr ) {
			print "$Str<br>\n";
	}
}

#-----------------------------------------------------------
# キャッチコピー表示サブルーチン
#
sub SetCatchCopy {

	foreach $Str ( @CatchCopyStr ) {
			print "$Str";
	}
}

#-----------------------------------------------------------
# セールスポイント表示サブルーチン
#
sub SetSalesPoint{

	foreach $Str ( @SalespointStr ) {
			print "<li>$Str\n";
	}
}

#-----------------------------------------------------------
# プルダウン設定（ Variation1：Variation2:金額 ）
#
sub SetPulldownItem {

	$TmpCnt = 0;
	# SQL発行
	$strSQL_Sel = "select *
					from hanyo_tbl
					where shohinname = '$db_ID_euc'
				    order by variation1, variation2";
					
#					 and hanyoid != '$HanyoID_euc'";

	my $sth = $conn->prepare("$strSQL_Sel");
	$sth->execute();

=pod
	$result = $conn->exec("$strSQL_Sel");
	$tmpCount = $result->ntuples;
=cut;


	while ( @row = $sth->fetchrow_array ) {
##	for($i=0;$i<$tmpCount;$i++){

=pod
		$db_ID = $result->getvalue($i,0);			# 商品名
		$db_Stock = $result->getvalue($i,2);		# 在庫数
		$db_Kakaku = $result->getvalue($i,3);		# 価格
		$db_Vari1 = $result->getvalue($i,4);		# バリエーション１
		$db_Vari2 = $result->getvalue($i,5);		# バリエーション２
		$db_HanyoID = $result->getvalue($i,14);		# 汎用ID
=cut
		$db_ID = $row[0];			# 商品名
		$db_Stock = $row[2];		# 在庫数
		$db_Kakaku = $row[3];		# 価格
		$db_Vari1 = $row[4];		# バリエーション１
		$db_Vari2 = $row[5];		# バリエーション２
		$db_HanyoID = $row[14];		# 汎用ID


		# 選択した汎用ＩＤ以外の同一商品がプルダウン表示対象
		if( $db_HanyoID ne $db_HanyoID_euc  ){
			&jcode::convert( *db_ID, 'sjis' );
			&jcode::convert( *$db_Stock, 'sjis' );
			&jcode::convert( *db_Kakaku, 'sjis' );
			&jcode::convert( *db_Vari1, 'sjis' );
			&jcode::convert( *db_Vari2, 'sjis' );
			&jcode::convert( *db_HanyoID, 'sjis' );
	
			if ( $TmpCnt == 0 ){
				print "<SELECT name=HanyoID>","\n";
				print "<OPTION value=\"NoSelect\" selected>その他のバリエーション","\n";
				$TmpCnt = 1;
			}
			# バリエーションチェック&セット
			&CheckVariation();
			print "<OPTION value=\"$db_HanyoID\">$PullDownOption","\n";
		}
	}

	if ( $TmpCnt == 1 ){
		print "</OPTION></SELECT>","\n";
		print "<input type=\"submit\" value=\"詳細\">","\n";
	}
	# Hidden情報設定
	&SetHiddenItem();
}

#-----------------------------------------------------------
# 選択バリエーションセットt
#
sub SetChoiceVariation{

	if( $db_Vari1 ne "" and $db_Vari2 ne "" ){
		$ChoiceVariation = "$db_Vari1：$db_Vari2<br>";
	}
	else{
		if( $db_Vari1 ne "" ){
			$ChoiceVariation = "$db_Vari1<br>";
		}
		if( $db_Vari2 ne "" ){
			$ChoiceVariation = "$db_Vari2<br>";
		}
		if( $db_Vari1 eq "" and $db_Vari2 eq "" ){
			$ChoiceVariation = "";
		}
	}
}

#-----------------------------------------------------------
# バリエーションチェック
#
sub CheckVariation{

	# 金額(桁区切り)
	$db_Kakaku = reverse(join(",",(reverse($db_Kakaku) =~ /(\d{1,3})/g)));
	if( $db_Vari1 ne "" and $db_Vari2 ne "" ){
		$PullDownOption = "$db_Vari1：$db_Vari2：\\$db_Kakaku";
	}
	else{
		if( $db_Vari1 ne "" ){
			$PullDownOption = "$db_Vari1：\\$db_Kakaku";
		}
		if( $db_Vari2 ne "" ){
			$PullDownOption = "$db_Vari2：\\$db_Kakaku";
		}
		if( $db_Vari1 eq "" and $db_Vari2 eq "" ){
			$PullDownOption = "\\$db_Kakaku";
		}
	}
	# 在庫管理を行う かつ 在庫が0個未満の場合は【SOLD OUT】表示する
	if( $ini_Zaiko == 1 and $db_Stock <= 0 ){
		$PullDownOption .= " 【SOLD OUT】";
	}
}

#-----------------------------------------------------------
# HiddenItem設定
#
sub SetHiddenItem{

	print "<input type=hidden name=CategoryName value=\"$CategoryName\">\n";	# 大分類
	print "<input type=hidden name=GenreName value=\"$GenreName\">\n";			# 小分類
	print "<input type=hidden name=ViewCnt value=\"$ViewCnt\">\n";				# ViewCount
}


#-----------------------------------------------------------
# Shop.iniから在庫計算方法を取得
#
sub GetStockInfo {

	&FileOpenShopINI();
	$ReadSection = "Zaiko Section";
	@ShopINI = ();					# @ShopINI の初期化
	&ReadShopINI();

	foreach $TMP1 ( @ShopINI ) {				# hotcake.iniの情報を
		# １レコードづつ処理を行う
		( $Item, $Value ) = split( /=/,$TMP1 );	#  = で分割する
		$RegINI{$Item} = $Value;			# タグ表示フラグ
	}
	$ini_Zaiko		= $RegINI{Zaiko};
}


#-----------------------------------------------------------
# お問い合わせボタン表示
#
sub SetInquiryButton
{
	print <<"EndOfInquiryButton";
		<form method="post" action="hotcake13.pl" target="new">
		<INPUT TYPE=hidden NAME="HanyoID" VALUE="$HanyoID">
		<input type="submit" name="inquiry" value="この商品に関するお問い合せ">
		</form>
EndOfInquiryButton

}

__END__
