#!/usr/local/bin/perl

#┌──────────────────────────────
#│ ShoppingCart : cart.cgi - 2013/11/16
#│ copyright (c) KentWeb
#│ http://www.kent-web.com/
#└──────────────────────────────

# モジュール宣言
use strict;
use CGI::Carp qw(fatalsToBrowser);
use lib "./lib";
use CGI::Minimal;
use CGI::Session;
use vars qw($cgi %in %cf);

# 設定ファイル認識
require "./init.cgi";
%cf = init();

# データ受理
CGI::Minimal::max_read_size($cf{maxdata});
$cgi = CGI::Minimal->new;
error('容量オーバー') if ($cgi->truncated);
%in = parse_form($cgi);

# 処理分岐
if ($in{show_law})  { show_law(); }
if ($in{mode_addr} or $in{back_addr}) { addr_form(); }
if ($in{mode_conf}) { conf_form(); }
if ($in{mode_send}) { send_cart(); }
if ($in{look_cart}) { look_cart(); }
menu_list();

#-----------------------------------------------------------
#  メニュー表示
#-----------------------------------------------------------
sub menu_list {
	require './lib/menu_list.pl';
	menu_list_pl();
}

#-----------------------------------------------------------
#  カート中身
#-----------------------------------------------------------
sub look_cart {
	require './lib/look_cart.pl';
	look_cart_pl();
}

#-----------------------------------------------------------
#  住所入力画面
#-----------------------------------------------------------
sub addr_form {
	require './lib/addr_form.pl';
	addr_form_pl();
}

#-----------------------------------------------------------
#  確認画面
#-----------------------------------------------------------
sub conf_form {
	require './lib/conf_form.pl';
	conf_form_pl();
}

#-----------------------------------------------------------
#  注文確定
#-----------------------------------------------------------
sub send_cart {
	require './lib/send_cart.pl';
	send_cart_pl();
}

#-----------------------------------------------------------
#  特定商取引法の表記
#-----------------------------------------------------------
sub show_law {
	require './lib/show_law.pl';
	show_law_pl();
}

#-----------------------------------------------------------
#  フッター
#-----------------------------------------------------------
sub footer {
	my $foot = shift;

	# 著作権表記（削除・改変禁止）
	my $copy = <<EOM;
<p style="margin-top:2em;text-align:center;font-family:Verdana,Helvetica,Arial;font-size:10px;">
- <a href="http://www.kent-web.com/" target="_top">ShoppingCart</a> -
</p>
EOM

	if ($foot =~ /(.+)(<\/body[^>]*>.*)/si) {
		print "$1$copy$2\n";
	} else {
		print "$foot$copy\n";
		print "</body></html>\n";
	}
	exit;
}

#-----------------------------------------------------------
#  入力チェック
#-----------------------------------------------------------
sub check_input {
	my %er;
	if ($in{kana} eq '') { $er{kana} = 'ふりがなが未入力です'; }
	if ($in{name} eq '') { $er{name} = '名前が未入力です'; }
	if ($in{email} !~ /^[\w\.\-]+\@[\w\.\-]+\.[a-zA-Z]{2,6}$/) { $er{email} = 'E-mailが不正です'; }
	if ($in{zip} !~ /^\d{3}-?\d{4}$/) { $er{zip} = '郵便番号は「数字7桁」か「数字3桁-4桁」です'; }
	if ($in{pref} eq '' || $in{addr} eq '') { $er{addr} = '住所が未入力です'; }
	if ($in{tel} eq '') { $er{tel} = '電話番号が未入力です'; }
	return %er;
}

#-----------------------------------------------------------
#  基本データ取得
#-----------------------------------------------------------
sub read_base {
	# トップデータ
	open(IN,"$cf{msgfile}") or error("open err: $cf{msgfile}");
	my @data = <IN>;
	close(IN);

	# タグ復元
	$data[2] =~ s/&amp;/&/g;
	$data[2] =~ s/&quot;/"/g;
	$data[2] =~ s/&lt;/</g;
	$data[2] =~ s/&gt;/>/g;
	$data[2] =~ s/&#39;/'/g;

	# カテゴリボタン
	my $categ = qq|<li><a href="$cf{cart_cgi}?sid=$in{sid}">全商品</a></li>\n|;
	if (@{$cf{cate}} > 0) {
		foreach (0 .. $#{$cf{cate}}) {
			$categ .= qq|<li><a href="$cf{cart_cgi}?cate=$_&sid=$in{sid}">$cf{cate}->[$_]</a></li>\n|;
		}
	}

	# ハッシュを定義して返す
	my %top = (
		ttl => $data[0],
		sub => $data[1],
		msg => $data[2],
		cat => $categ,
	);
	return %top;
}

#-----------------------------------------------------------
#  エラー画面
#-----------------------------------------------------------
sub error {
	my $err = shift;

	open(IN,"$cf{tmpldir}/error.html") or die;
	my $tmpl = join('', <IN>);
	close(IN);

	$tmpl =~ s/!error!/$err/g;

	print "Content-type: text/html; charset=utf-8\n\n";
	print $tmpl;
	exit;
}

