#!/usr/bin/perl

#文字コードライブラリ
require './jcode.pl';

#HTMLライブラリ
require './news.pl';
require './nomal.pl';
require './item.pl';
require './menu.pl';
require './profile.pl';
require './contact.pl';
require './cart.pl';
require './form.pl';

#スクリプト名
$script="./sitemaker.cgi";

#固定画像
$pdf   ="pdf.gif";
$spacer="spacer.gif";

#ログファイルディレクトリ
$comment="./comment";
$design ="./design";
$rules  ="./rules";

$access_flag=0;

#ホスト名取得
$user_host=$ENV{'HTTP_HOST'};

open(IN,"$rules/server.dat");
@ini=<IN>;
close(IN);

($set1,$set2,$set3,$set4,$set5,$set6,$set7,$set8,$set9,$set10,$set11)=split(/,/, $ini[0]);

$filedir="$set8/img/";

#タイトル・メタ情報ログファイルの読み込み
open(IN,"$design/meta.dat");
@meta=<IN>;
close(IN);
($set,$part,$subpt,$endpt,$m1,$m2,$m3,$m4,$m5,$m6,$m7,$m8,$m9,$m10,$m11,$m12,$m13,$m14,$m15,$m16,$m17,$m18,$m19,$m20,$m21,$m22,$m23,$m24,$m25,$m26,$m27,$m28,$m29,$m30,$m31,$m32,$m33,$m34,$m35,$m36,$m37,$m38,$m39,$m40)=split(/,/, $meta[0]);

$m8 =~ s/<br>//g;
if($m3){$keyword1="$m3,";}
if($m4){$keyword2="$m4,";}
if($m5){$keyword3="$m5,";}
if($m6){$keyword4="$m6,";}
if($m7){$keyword5="$m7,";}
if($m8){$description="$m8";}

#ページ基本設定ログファイルのデータ格納
open(IN,"$design/layout.dat");
@layout=<IN>;
close(IN);
($set,$part,$subpt,$endpt,$l1,$l2,$l3,$l4,$l5,$l6,$l7,$l8,$l9,$l10,$l11,$l12,$l13,$l14,$l15,$l16,$l17,$l18,$l19,$l20,$l21,$l22,$l23,$l24,$l25,$l26,$l27,$l28,$l29,$l30,$l31,$l32,$l33,$l34,$l35,$l36,$l37,$l38,$l39,$l40)=split(/,/, $layout[0]);

#HTMLライブラリ
if($l1 eq "layout1"){require './layout1.pl';}
if($l1 eq "layout2"){require './layout2.pl';}

#サイト構成設定ログファイルのデータ格納
open(IN,"$design/const.dat");
@const=<IN>;
close(IN);

($set,$part,$subpt,$endpt,$category0,$category1,$category2,$category3,$category4,$category5,$page10,$page11,$page12,$page13,$page14,$page15,$page20,$page21,$page22,$page23,$page24,$page25,$page30,$page31,$page32,$page33,$page34,$page35,$page40,$page41,$page42,$page43,$page44,$page45,$page50,$page51,$page52,$page53,$page54,$page55,$link0,$link1,$link2,$link3,$link4,$link5,$target0,$target1,$target2,$target3,$target4,$target5)= split(/,/, $const[0]);

#カテゴリー名
$category[0]="$category0";
$category[1]="$category1";
$category[2]="$category2";
$category[3]="$category3";
$category[4]="$category4";
$category[5]="$category5";

#ページジ名
$page[0]="トップページ";
$page[1]="$page10,$page11,$page12,$page13,$page14,$page15";
$page[2]="$page20,$page21,$page22,$page23,$page24,$page25";
$page[3]="$page30,$page31,$page32,$page33,$page34,$page35";
$page[4]="$page40,$page41,$page42,$page43,$page44,$page45";
$page[5]="$page50,$page51,$page52,$page53,$page54,$page55";

#任意リンク
$link[0]="$link0";
$link[1]="$link1";
$link[2]="$link2";
$link[3]="$link3";
$link[4]="$link4";
$link[5]="$link5";

open(IN,"$design/page_link.dat");
@page_link=<IN>;
close(IN);
($set,$part,$subpt,$endpt,$p_lk10,$p_lk11,$p_lk12,$p_lk13,$p_lk14,$p_lk15,$p_tg10,$p_tg11,$p_tg12,$p_tg13,$p_tg14,$p_tg15,$p_lk20,$p_lk21,$p_lk22,$p_lk23,$p_lk24,$p_lk25,$p_tg20,$p_tg21,$p_tg22,$p_tg23,$p_tg24,$p_tg25,$p_lk30,$p_lk31,$p_lk32,$p_lk33,$p_lk34,$p_lk35,$p_tg30,$p_tg31,$p_tg32,$p_tg33,$p_tg34,$p_tg35,$p_lk40,$p_lk41,$p_lk42,$p_lk43,$p_lk44,$p_lk45,$p_tg40,$p_tg41,$p_tg42,$p_tg43,$p_tg44,$p_tg45,$p_lk50,$p_lk51,$p_lk52,$p_lk53,$p_lk54,$p_lk55,$p_tg50,$p_tg51,$p_tg52,$p_tg53,$p_tg54,$p_tg55,$date,$times)= split(/,/, $page_link[0]);

#アクセス認証
open(IN,"$design/access.dat");
@access=<IN>;
close(IN);
($set,$part,$subpt,$endpt,$acs10,$acs11,$acs12,$acs13,$acs14,$acs15,$acs20,$acs21,$acs22,$acs23,$acs24,$acs25,$acs30,$acs31,$acs32,$acs33,$acs34,$acs35,$acs40,$acs41,$acs42,$acs43,$acs44,$acs45,$acs50,$acs51,$acs52,$acs53,$acs54,$acs55)=split(/,/, $access[0]);

#サブルーチン実行定義
&decode;

if($in{'category'} eq ""){$in{'category'}="0";}
if($in{'page'} eq "")    {$in{'page'}="page0";}

#ページログファイルの読み込み
open(IN,"$design/$in{'page'}$in{'category'}.dat");
@pagedata=<IN>;
close(IN);
($set,$part,$subpt,$endpt,$p1,$p2,$p3,$p4,$p5,$p6,$p7,$p8,$p9,$p10,$p11,$p12,$p13,$p14,$p15,$p16,$p17,$p18,$p19,$p20,$p21,$p22,$p23,$p24,$p25,$p26,$p27,$p28,$p29,$p30,$p31,$p32,$p33,$p34,$p35,$p36,$p37,$p38,$p39,$p40,$p41,$p42,$p43,$p44,$p45,$p46,$p47,$p48,$p49,$p50,$date,$times)=split(/,/, $pagedata[0]);

if($mode eq 'page')        {&page_html;}
if($mode eq 'item_detail1'){&item_detail1;}
if($mode eq 'item_detail2'){&item_detail2;}
if($mode eq 'item_detail3'){&item_detail3;}
if($mode eq 'sales_rule')  {&sales_rule;}
if($mode eq 'access_check'){&access_check;}
if($mode eq 'cart_disp')   {&cart_disp;}
else                       {&page_html;}

exit;

#HTMLヘッダ-----------------------------------------------------------------------------------------------------------------------
sub header{

print "Content-type: text/html\n\n";
print <<"EOM";
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>$m2</title>
<meta name="keywords" content="$keyword1$keyword2$keyword3$keyword4$keyword5">
<meta name="description" content="$description">
<meta name="robots" content="index,follow">
<STYLE TYPE="text/css">
<!--
a:hover{ color: $l9 }
-->
</STYLE>
<script language="JavaScript">
<!--

if(!navigator.cookieEnabled)alert("クッキーの書き込みができません。ブラウザの設定を変更してくだい。");

function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}

function CloseWin(){
    window.close();
}

function MM_goToURL() { //v3.0
  var i, args=MM_goToURL.arguments; document.MM_returnValue = false;
  for (i=0; i<(args.length-1); i+=2) eval(args[i]+".location='"+args[i+1]+"'");
}

//-->
</script>
</head>
EOM

}

#HTMLヘッダ-----------------------------------------------------------------------------------------------------------------------
sub header_shop{

if($in{'action'} eq "order_mail"){&item_delete;}
else                             {&item_set;}

print <<"EOM";
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>$m2</title>
<meta name="keywords" content="$keyword1$keyword2$keyword3$keyword4$keyword5">
<meta name="description" content="$description">
<meta name="robots" content="index,follow">
<STYLE TYPE="text/css">
<!--
a:hover{ color: $l9 }
-->
</STYLE>
<script language="JavaScript">
<!--

if(!navigator.cookieEnabled)alert("クッキーの書き込みができません。ブラウザの設定を変更してくだい。");

function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}

function CloseWin(){
    window.close();
}

function MM_goToURL() { //v3.0
  var i, args=MM_goToURL.arguments; document.MM_returnValue = false;
  for (i=0; i<(args.length-1); i+=2) eval(args[i]+".location='"+args[i+1]+"'");
}

//-->
</script>
</head>
EOM

}

#アクセス認証チェック-------------------------------------------------------------------------------------------------------------
sub access_check{

open(IN,"$comment/member.dat");
@access_check=<IN>;

	$flag=0;
	foreach $x (@access_check){

	($no,$set,$part,$subpt,$endpt,$id,$pass,$c3,$c4,$c5,$c6,$c7,$c8,$c9,$c10,$c11,$c12,$c13,$c14,$c15,$c16,$c17,$c18,$c19,$c20,$c21,$c22,$c23,$c24,$c25,$c26,$c27,$c28,$c29,$c30,$title,$stitle,$btitle,$ititle,$ctitle,$url,$wd,$img,$msg,$smsg,$bmsg,$imsg,$cmsg,$img1,$wimg1,$himg1,$pimg1,$img2,$wimg2,$himg2,$pimg2,$img3,$wimg3,$himg3,$pimg3,$img4,$wimg4,$himg4,$pimg4,$date,$time)=split(/,/, $x);

		if($id eq "$in{'user_id'}" && $pass eq "$in{'user_pass'}"){$flag=1;}

	}

close(IN);

	if($mode eq "item_detail1" || $mode eq "item_detail2" || $mode eq "item_detail3"){

		if($flag){

		$check="OK";

		if($mode eq "item_detail1"){&item_detail1;}
		if($mode eq "item_detail2"){&item_detail2;}
		if($mode eq "item_detail3"){&item_detail3;}

		}

		else{

		$check="NG";

		if($mode eq "item_detail1"){&item_detail1;}
		if($mode eq "item_detail2"){&item_detail2;}
		if($mode eq "item_detail3"){&item_detail3;}

		}

	}

	else{

		if($flag){

		&user_set;
		&header;

			if($in{'user'} eq "out"){print"<body background=\"$filedir$l5\" bgcolor=\"$l4\" text=\"$l6\" link=\"$l7\" vlink=\"$l8\" alink=\"$l9\" leftmargin=\"$l2\" topmargin=\"$l3\" marginwidth=\"$l2\" marginheight=\"$l3\" onLoad=\"MM_goToURL('self','$script');return document.MM_returnValue\">";}
			else                    {print"<body background=\"$filedir$l5\" bgcolor=\"$l4\" text=\"$l6\" link=\"$l7\" vlink=\"$l8\" alink=\"$l9\" leftmargin=\"$l2\" topmargin=\"$l3\" marginwidth=\"$l2\" marginheight=\"$l3\" onLoad=\"MM_goToURL('self','$script?mode=page&page=$in{'page'}&category=$in{'category'}');return document.MM_returnValue\">";}

		}

		else{

		&header;

		print"<body background=\"$filedir$l5\" bgcolor=\"$l4\" text=\"$l6\" link=\"$l7\" vlink=\"$l8\" alink=\"$l9\" leftmargin=\"$l2\" topmargin=\"$l3\" marginwidth=\"$l2\" marginheight=\"$l3\" onLoad=\"MM_goToURL('self','$script?mode=page&page=$in{'page'}&category=$in{'category'}&access=error');return document.MM_returnValue\">";

		}

	}

exit;

}

#アクセス認証エラー---------------------------------------------------------------------------------------------------------------
sub access_error{

print <<"EOM";
<br>
<br>
<table width="300" border="1" cellspacing="2" cellpadding="2" bordercolor="#999999" bgcolor="#CCCCCC" align="center">
<tr bordercolor="#CCCCCC" bgcolor="#000066"> 
<td height="20"><font color="#FFFFFF" size="-1">認証エラー</font></td>
</tr>
<tr bordercolor="#CCCCCC" bgcolor="#CCCCCC"> 
<td align="center"><font color="#FF0000" size="-1"><b>認証できませんでした</b></font></td>
</tr>
<tr bordercolor="#CCCCCC" bgcolor="#CCCCCC" align="center">
<form action="$script" method="post">
<td align="center">
<input type="hidden" name="category" value="$in{'category'}">
<input type="hidden" name="page" value="$in{'page'}">
<input type="submit" value="戻る">
</td>
</form>
</tr>
</table>
<br>
EOM

}

#ユーザー情報の発行---------------------------------------------------------------------------------------------------------------
sub user_set{

#クッキーは国際時間をキーとし、保存日数は365日間
($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg)=gmtime(time + 365*24*60*60);

#曜日と週を配列で定義
@mong =('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
@weekg=('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');

#365日後の国際時間を指定フォーマット化
$date_gmt=sprintf("%s, %02d\-%s\-%04d %02d\:%02d\:%02d GMT",
              $weekg[$wdayg],$mdayg,$mong[$mong],$yearg+1900,$hourg,$ming,$secg);

#保存するクッキー情報を整列

if($in{'user'} eq "out"){$user="user_id\:\,user_pass\:\,save\:\,time\:\,";}
else                    {$user="user_id\:$in{'user_id'}\,user_pass\:$in{'user_pass'}\,save\:$in{'save'}\,time\:$in{'time'}\,";}

if($in{'save'} eq "save"){print "Set-Cookie: $set2=$user; expires=$date_gmt;\n";}
else                     {print "Set-Cookie: $set2=$user;\n";}

}

#ユーザー情報の取得---------------------------------------------------------------------------------------------------------------
sub user_get{

#クッキー情報を取得
$cookie_user=$ENV{'HTTP_COOKIE'};

#取得したクッキー情報を分解
@pairs=split(/;/, $cookie_user);

foreach $pair (@pairs){

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

}

#クッキーIDを指定
@pairs=split(/,/, $DUMMY{$set2});

foreach $pair (@pairs){

local($name,$value)=split(/:/, $pair);
$COOKIE_USER{$name}=$value;

}

#クッキーで得た名前、メール、URLを定義
$c_id  =$COOKIE_USER{'user_id'};
$c_pass=$COOKIE_USER{'user_pass'};
$c_save=$COOKIE_USER{'save'};
$c_time=$COOKIE_USER{'time'};

}

#商品情報の発行-------------------------------------------------------------------------------------------------------------------
sub item_set{

	if($in{'unit'} eq "0" || $in{'unit'}=~ /[^0-9]/){

	print "Content-type: text/html\n";
	print "\n";

	}

	else{

	$in{'item'}=~ s/&lt;/</g;
	$in{'item'}=~ s/&gt;/>/g;
	$in{'item'}=~ s/&quot;/\"/g;

	$in{'other1'}=~ s/&lt;/</g;
	$in{'other1'}=~ s/&gt;/>/g;
	$in{'other1'}=~ s/&quot;/\"/g;

	$in{'other2'}=~ s/&lt;/</g;
	$in{'other2'}=~ s/&gt;/>/g;
	$in{'other2'}=~ s/&quot;/\"/g;

	$in{'other3'}=~ s/&lt;/</g;
	$in{'other3'}=~ s/&gt;/>/g;
	$in{'other3'}=~ s/&quot;/\"/g;

	$in{'unit_price'}=~ s/&lt;/</g;
	$in{'unit_price'}=~ s/&gt;/>/g;
	$in{'unit_price'}=~ s/&quot;/\"/g;

	($unit_price,$type)=split(/:/, $in{'unit_price'});

	$order="$code<>$in{'item'}<>$in{'other1'}<>$in{'other2'}<>$in{'other3'}<>$in{'unit'}<>$unit_price<>$type";

	$cookie_shop=$ENV{'HTTP_COOKIE'};
	@pairs=split(/;/,$cookie_shop);

		foreach $pair (@pairs) {

		($name, $value)=split(/=/, $pair);
		$name=~ s/\s//g;

			if($name=~m/^\d{10}$/ && $value ne ""){$COOKIE_SHOP{$name}=$value;}
			if($in{'unit'}>0)                     {$COOKIE_SHOP{$code}=$order;}

		}

		if($clear){

		delete $COOKIE_SHOP{$clear};
		$code=$clear;
		$order="";

		}

	print "Content-type: text/html\n";
	print "Set-Cookie: $code=$order; domain=$user_host; \n";
	print "\n";

	}

}

#商品情報のの削除-----------------------------------------------------------------------------------------------------------------
sub item_delete{

$cookie_shop=$ENV{'HTTP_COOKIE'};
@pairs=split(/;/,$cookie_shop);

print "Content-type: text/html\n";

	foreach $pair (@pairs) {

	($name, $value)=split(/=/, $pair);
	$name=~ s/\s//g;

		if($name=~m/^\d{10}$/ && $value ne ""){

		$code=$name;
		$order="";

		print "Set-Cookie: $code=$order;\n";

		}

	}

print "\n";

}

#自動リンク-----------------------------------------------------------------------------------------------------------------------
sub auto_link {

	$msg =~ s/([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\=\@\;\#\:\%]+)/$1<a href=\"$2\" target='_blank'>$2<\/a>/g;
	$p26 =~ s/([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\=\@\;\#\:\%]+)/$1<a href=\"$2\" target='_blank'>$2<\/a>/g;

}

#デコード処理 --------------------------------------------------------------------------------------------------------------------
sub decode{

#データ送信方法がPOSTの場合
	if($ENV{'REQUEST_METHOD'} eq "POST"){

	binmode(STDIN);
	read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

	}

#データ送信方法がGETの場合
	else{$buffer=$ENV{'QUERY_STRING'};}

#送信内容がファイルの場合
	if($ENV{'CONTENT_TYPE'}=~ /multipart\/form-data; boundary=(.*)/){&methodmulti;}

#送信内容がファイルではない場合
	else{

	@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'h2z_sjis(*value);
		&jcode'convert(*value,'sjis');

#文字コード変換
		&jcode'h2z_sjis(*value);
		&jcode'convert(*value,'sjis');
		&jcode'convert(*name,'sjis');

#タグ処理
		$value=~ s/\"/&quot;/g;
		$value=~ s/</&lt;/g;
		$value=~ s/>/&gt;/g;

#改行・カンマ処理
		$value=~ s/\r\n/<br>/g;
		$value=~ s/\r/<br>/g;
		$value=~ s/\n/<br>/g;

		if($name =~ /^c_/){$name=~ s/^c_//; $color=$name;}
		if($name =~ /^f_/){$name=~ s/^f_//; $file=$name;}

		if($name =~ /^\_/){

			if($value eq ""){$flag=1; $error_name=$name; last;}

		}

		$name=~ s/^\_//;

		$in{$name} .= $value;

		push(@formdata,$name);

		}

	}

	$mode=$in{'mode'};
	$view=$in{'view'};
	$code=$in{'code'};
	$clear=$in{'clear'};

}

#時間の取得 ----------------------------------------------------------------------------------------
sub get_time{

$ENV{'TZ'}="JST-9"; #タイムゾーンを日本時間へ
$times=time;
$times2=time+24*60*60;

($sec,$min,$hour,$mday,$mon,$year,$wday,$dmy,$dmy) = localtime($times);
@week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat');

#日時のフォーマット
$date=sprintf("%04d\/%02d\/%02d(%s)",
		$year+1900,$mon+1,$mday,$week[$wday],$hour,$min);
}