#!/usr/local/bin/perl

# yybbs.cgi 最終更新 2007/02/19

#┌─────────────────────────────────
#│  YY-BOARD - yybbs.cgi - 2005/11/20
#│  Copyright (c) KentWeb
#│  webmaster@kent-web.com
#│  http://www.kent-web.com/
#└─────────────────────────────────

# YY-BOARD v5.33用携帯電話対応スクリプト
# 2005/01/04　湯一路　http://www.url-battle.com/cgi/

# 外部ファイル取込
require './yyini.cgi';
require "$jcode_file";
require "$cgi_lib_file";
# use CGI::Carp qw(fatalsToBrowser);

# メイン処理
&maxdata if (-e "$maxdata_file"); # 添付データ投稿受理最大サイズ取得
&agent; # 携帯端末別の分岐
&decode;

# 外部ファイル取込
require "./$room/yyini2.cgi";

# 設定ファイル読み込み
&data_load;

# 携帯電話用タイトル画像・絵文字メッセージ
&agent2;

# 絵文字入力フォーム
if ($em_form eq 1) { $com_name = "comment2" }
else { $com_name = "comment" }

# 外部ファイル取込 # <e-PAD>
if ($epad_use) {
	require "$epad_file";
	&emoji_table; # 絵文字変換テーブル
}

# 外部ファイル取込 ファイル添付機能
# if ($upload == 1) { require './resize.pl' if(-e './resize.pl'); }

# メイン処理
# &agent; # 携帯端末別の分岐
# &decode;
# DoCoMoで閲覧時機種情報取得
if ($UtnOn == 3 && ($imode == 3 || $imode == 8)) { $DCMUtn = ' utn'; }
else { $DCMUtn = ''; }
&axsCheck;
if ($miruPass && $mode ne "jump" && $mode ne "check" && $mode ne "image") { &miruPass; }
if ($ProxyChk >= 4) { &ProxyChk; }
if (($UtnOn == 2 && $imode && $imode != 3 && $imode != 8) || ($UtnOn == 3 && $imode)) { &UtnCheck; }
if ($mode eq "res" && $imode) { $mode='msgview'; }
elsif ($mode eq "msgview" && !$imode) { $mode='res'; }
if ($mode eq "howto") { require "${libDir}howto.pl"; &howto; }
elsif ($mode eq "check") { require "${libDir}check.pl"; &check; }
elsif ($mode eq "image") { require "${libDir}image.pl"; &image; }
elsif ($mode eq "about") { require "${libDir}about.pl"; &about; }
elsif ($mode eq "imode" && $imode) { require "${libDir}imode_write.pl"; &imode_write; }
elsif ($mode eq "shinki" && !$imode) { require "${libDir}shinki.pl"; &shinki; }
elsif ($mode eq "kkc") { require "${libDir}kakucho.pl"; &kakucho; }
elsif ($mode eq "find") { require "${libDir}find.pl"; &find; }
elsif ($mode eq "pic") { require "${libDir}pic.pl"; &pic; }
elsif ($mode eq "WCV") { require "${libDir}write_count_view.pl"; &WriteCountView; }
elsif ($mode eq "thd") { require "${libDir}thread.pl"; &thread; }
elsif ($mode eq "iconup") { require "${libDir}iconup.pl"; &iconup; }
elsif ($mode eq "ezdl") { require "${libDir}ezdownload.pl"; &ezdl; }
elsif ($mode eq "jump") { &jump; }
if (!$imode) { require "${libDir}yybbs_pc.pl"; }
if ($mode eq "res" && !$imode) { require "${libDir}res_form.pl"; &resForm; }
&logView_main;


#-------------------------------------------------
#  記事表示部
#-------------------------------------------------
sub logView_main {
	local($hyoujichu)=1; # 記事表示中フラグ
	# PC
	if (!$imode) {
		if ($newok != 1 && $defMode eq 'sortnew') { $defMode = 'std'; }
		if ($in{'mode2'}) { $mode = $in{'mode2'}; } # 投稿後等
		elsif (!$mode) { $mode = $defMode; } # 初期表示形式

		# スキンで表示（閲覧者限定時は無効）
		if ((((!$mode || $mode eq 'std') && $stdSkin) || ($mode eq 'sortnew' && $newSkin) || ($mode eq 'preview' && $preSkin) || ($mode eq 'tree' && $treSkin)) && !$miruPass) {
			require "${libDir}logview_pc2.pl";
			&logView;
		# 通常表示
		} else {
			require "${libDir}logview_pc1.pl";
			&logView;
		}
	# 携帯
	} else {
		require "${libDir}logview_tel1.pl";
		&logView;
	}
}

#-------------------------------------------------
#  カウンタ処理
#-------------------------------------------------
sub counter {
	my ($str) = $_[0];

	# 閲覧時のみカウントアップ
	if ($mode eq '') { $cntup=1; }
	elsif ($mode eq 'std') { $cntup=1; }
	elsif ($mode eq 'preview') { $cntup=1; }
	elsif ($mode eq 'sortnew') { $cntup=1; }
	elsif ($mode eq 'tree') { $cntup=1; }
	elsif ($preview == 1) { $cntup=1; }
	elsif ($sortnew == 1) { $cntup=1; }
	elsif ($tree == 1) { $cntup=1; }
	else { $cntup=0; }

	# 掲示板内での移動ならカウントアップしない
	# $baseUrlが指定されていない場合は無効
	# 入室認証から移動した場合は無効
	if ($ipcheck != 2 && $baseUrl && $in{'count'} ne 'on') {
		my $ref_url = $ENV{'HTTP_REFERER'};
		my $bbs_url2 = $baseUrl;
		my $pattern = 'https?\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%\,]+';
		$ref_url =~ s/($pattern)\/.+\..+/$1\//;
		$bbs_url2 =~ s/($pattern)\/.+\..+/$1\//;
		if ($ref_url eq $bbs_url2) { $cntup=0; }
	}

	# カウントファイルを読みこみ
	open(CNT,"+< $cntfile") || &error("Open Error: $cntfile");
	eval "flock(CNT, 2);";
	my $count = <CNT>;

	# IPチェックとログ破損チェック
	my ($cnt, $ip) = split(/:/, $count);
	if (!$ipcheck) {
		# 同じIPアドレスからのアクセスでカウントアップしない場合
		if ($addr eq $ip || $cnt eq "") { $cntup=0; }
	} else {
		# 同じIPアドレスからのアクセスでカウントアップする場合
		if ($cnt eq "") { $cntup=0; }
	}

	# カウントアップ
	if ($cntup) {
		$cnt++;
		seek(CNT, 0, 0);
		print CNT "$cnt\:$addr";
		truncate(CNT, tell(CNT));
	}
	close(CNT);

	# 桁数調整
	while(length($cnt) < $mini_fig) { $cnt = '0' . $cnt; }
	my @count = split(//, $cnt);

	# スキンで表示
	if ($str eq 'skin') {
		$str = "";
		# GIFカウンタ
		if ($counter == 2) {
			foreach (0 .. $#count) {
				$str .= "<img src=\"$gif_path$count[$_]\.gif\" alt=\"$count[$_]\" width=\"$mini_w\" height=\"$mini_h\">";
			}
		# テキストカウンタ
		} elsif ($counter == 1) {
			$str = "<font color=\"$cntCol\" face=\"Verdana,Helvetica,Arial\">$cnt</font>\n";
		}
		return $str;

	# 通常表示
	} else {
		# GIFカウンタ表示
		if ($counter == 2) {
			foreach (0 .. $#count) {
				print qq |<img src="$gif_path$count[$_]\.gif" alt="$count[$_]" width="$mini_w" height="$mini_h">|;
			}
		# テキストカウンタ表示
		} else {
			if ($imode == 0){
				print qq |<font color="$cntCol" face="Verdana,Helvetica,Arial">$cnt</font>\n|;
			} else {
				if ($cntColi) { print qq |<font color="$cntColi">$cnt</font><br>\n|; }
				else { print qq |$cnt<br>\n|; }
			}
		}
	}
}

#-------------------------------------------------
#  スレッド参照数保存
#-------------------------------------------------
sub ViewCountUp {
	my ($str)=@_;
	my @new=();
	my $flag=0;

	# ログを読み込み
	open(DAT,"+< $viewcntfile") || &error("Open Error: $viewcntfile");
	eval "flock(DAT, 2);";
	while (<DAT>) {
		my ($no,$count) = split(/<>/);
		if ($no == $str) { $count++; push(@new,"$no<>$count<>\n"); $flag++; }
		else { push(@new,$_); }
	}
	if (!$flag) { push(@new,"$str<>1<>\n"); }

	# 更新
	seek(DAT, 0, 0);
	print DAT @new;
	truncate(DAT, tell(DAT));
	close(DAT);
}

#-------------------------------------------------
#  スレッド参照数取得
#-------------------------------------------------
sub ViewCountGet {
	my (%ViewCnt)=();

	# ログを読み込み
	open(IN,"$viewcntfile") || &error("Open Error: $viewcntfile");
	while (<IN>) {
		my ($no,$count) = split(/<>/);
		$ViewCnt{$no} = $count;
	}
	close(IN);

	return %ViewCnt;
}

#-------------------------------------------------
#  ジャンプ処理
#-------------------------------------------------
sub jump {
	if (!$BaseDir) { &error('移動出来ません'); }
	if ($ENV{'HTTP_REFERER'} && index($ENV{'HTTP_REFERER'},$BaseDir) < 0) { &error('不正なアクセスです'); }
	if (!$miruPass) { &error('この機能\は使用出来ません'); }
	if (!$in{'url'}) { &error('URLが指定されていません'); }

	$in{'url'} =~ s/&amp;amp;/&/g;

	## --- URLへジャンプ
	# metaタグ式
	print "Content-type: text/html\n\n";
	print <<EOM;
<html>
<head>
<META HTTP-EQUIV="refresh" CONTENT="0; URL=$in{'url'}">
</head>
<body>
<center>移動しない場合は↓へどうぞ<br>
$in{'url'}</center>
</body>
</html>
EOM
	exit;
}


__END__

