#!/usr/bin/perl

#┌────────────────────────
#│ diary.cgi - 2004/04/12
#│ Copyright (c) KentWeb
#│ http://www.kent-web.com/
#└────────────────────────

# 外部ファイル取り込み
require './init.cgi';

&decode;
if ($mode eq "read") { &read; }
elsif ($mode eq "popup") { &popup; }
elsif ($mode eq "check") { &check; }
&topmenu;

#-------------------------------------------------
#  TOP画面
#-------------------------------------------------
sub topmenu {
	&header;
	print <<EOM;
<div align="center">
<table width="620" cellpadding=4 border=0>
<tr>
  <td class="tbl_1" colspan=13> &nbsp;&nbsp; <b>$title</b></td>
</tr>
</table>
<table width=620 border=0>
<tr>
  <td align=right height=35><a href="$home" onMouseover="image1.src='$imgurl/home2.gif'" onMouseout="image1.src='$imgurl/home1.gif'" target="_top"><img src="$imgurl/home1.gif" name="image1" border="0" alt="Homeに戻る"></a></td>
</tr>
</table>
<table width="620" cellpadding=4 border=0>
EOM

	# index読み取り
	open(IN,"$logdir/index.dat") || &error("Open Error: index.dat");
	while (<IN>) {
		@f = split(/,/);

		print "<tr><td height=35 align=center class=year>$f[0]</td>";
		foreach $i (1 .. 12) {

			print "<td align=center>";

			if ($f[$i]) {
				print "<a href=\"$script?mode=read&y=$f[0]&m=$i\">$i月</a>";
			} else {
				print "$i月";
			}

			print "</td>";
		}
		print "</tr>\n";
	}
	close(IN);

	print <<EOM;
</table>
<p>
<table width="620" cellpadding=4 border=0>
<tr>
  <td colspan=13 class=tbl_3 align=center>$message</td>
</tr>
</table>
<br><br><IMG src="/cgi-bin/Count.cgi?dd=C&srgb=000000&prgb=000000&negate=y&df=yumoto.txt&ft=0&md=6" align="center"><br>
EOM

	# 管理者ログインフォーム
	if ($login_form) {
		print "<div align=right>
		<form action=\"$admin\" method=\"POST\">
		<input type=password name=pass size=6>
		<input type=submit value='管理用'></form></div>\n";
	}

	# 著作権表示（削除禁止）
	print <<EOM;
<!-- $ver -->
<span style="font-size:10px; font-family:Verdana,Helvetica,Arial;">
- <a href="http://www.kent-web.com/" target="_top">DiaryNote</a> -
</span>
</div>
</body>
</html>
EOM
	exit;
}

#-------------------------------------------------
#  内容閲覧
#-------------------------------------------------
sub read {
	local($i,$flag,$next,$back,$sub_width);

	# 汚染チェック
	$in{'y'} =~ s/\D//g;
	$in{'m'} =~ s/\D//g;

	$data = sprintf("%04d%02d", $in{'y'},$in{'m'});
	$sub_width = $log_width + 30;

	&header('js');
	print <<EOM;
<div align="center">
<Table cellpadding=3><Tr><Td align="center" valign="top">
<table width="$sub_width" cellpadding="0" border="0">
<tr>
  <td class="tbl_1m" height="27"> &nbsp;&nbsp; Diary $in{'y'}. $in{'m'}</td>
</tr></table>
<table width="$log_width" border="0">
<tr>
  <td align="right" height="35"><a href="$script?" onMouseover="image2.src='$imgurl/back2.gif'" onMouseout="image2.src='$imgurl/back1.gif'"><img src="$imgurl/back1.gif" name="image2" border="0" alt="メニューに戻る"></a></td>
</tr>
</table>
EOM

	# ログ展開
	$i=0;
	undef(%cal);
	open(IN,"$logdir/$data.txt");
	while (<IN>) {
		$i++;
		($d,$w,$sub,$msg,$t[0],$w[0],$h[0],
			$t[1],$w[1],$h[1],$t[2],$w[2],$h[2]) = split(/<>/);

		$cal{$d} = $d;

		next if ($i < $page + 1);
		next if ($i > $page + $pagelog);

		# 自動リンク
		$msg = &auto_link($msg) if ($autolink);

		$day = $d;
		$day =~ s/^0//;

		print "<table width=\"$log_width\"><tr><td class=\"log\" align=\"$layout\">
		$in{'m'}月$day日 ($week[$w]) &nbsp;<b>$sub</b><br><br>$msg\n";

		$f=0;
		foreach $i (0 .. 2) {
			if ($t[$i]) { $f++; }
			else { next; }
			$j = $i+1;
			print "<p>\n" if ($f == 1);

			if ($w[$i] && $h[$i]) { $wh = "width=$w[$i] height=$h[$i]"; }
			print "<a href=\"$imgurl/$data$d-$j$t[$i]\" target=\"_blank\"><img src=\"$imgurl/$data$d-$j$t[$i]\" border=0 alt=\"$data$d-$j$t[$i]\" $wh></a>\n";
		}
		print "</p>" if ($f);

		print "</td></tr></table><br><br>\n";
	}
	close(IN);

	# 繰越数定義
	$next = $page + $pagelog;
	$back = $page - $pagelog;

	$flag=0;
	print "<table border=0><tr>\n";
	if ($back >= 0) {
		$flag++;
		print "<td valign=top><form action=\"$script\">\n";
		print "<input type=hidden name=page value=\"$back\">\n";
		print "<input type=hidden name=mode value=\"read\">\n";
		print "<input type=hidden name=y value=\"$in{'y'}\">\n";
		print "<input type=hidden name=m value=\"$in{'m'}\">\n";
		print "<input type=submit value=\"前の$pagelog件\"></form></td>\n";
	}
	if ($next < $i) {
		$flag++;
		print "<td valign=top><form action=\"$script\">\n";
		print "<input type=hidden name=page value=\"$next\">\n";
		print "<input type=hidden name=mode value=\"read\">\n";
		print "<input type=hidden name=y value=\"$in{'y'}\">\n";
		print "<input type=hidden name=m value=\"$in{'m'}\">\n";
		print "<input type=submit value=\"次の$pagelog件\"></form></td>\n";
	}

	# ページ移動ボタン表示
	if ($flag) {
		print "<td width=7></td><td class=page valign=top>\n";
		local($x,$y) = (1,0);
		while ($i > 0) {
			if ($page == $y) {
				print "| <b style='color:red'>$x</b>\n";
			} else {
				print "| <a href=\"$script?mode=read&page=$y&y=$in{'y'}&m=$in{'m'}\">$x</a>\n";
			}
			$x++;
			$y += $pagelog;
			$i -= $pagelog;
		}
		print "|</td>";
	} else {
		print "<td></td>";
	}

	print <<EOM;
</tr></table>
</Td>
<Td width=30></Td>
<Td valign="top">
EOM

	&calen;

	print <<EOM;
</Td>
</Tr></Table>
</div>
</body>
</html>
EOM
	exit;
}

#-------------------------------------------------
#  カレンダ
#-------------------------------------------------
sub calen {
	local($next_y,$next_m,$back_y,$back_m,$today,
		$last,$week,$md,$f,$i,$mkey,$holi,$flag,@col);

	# 本日を求める
	$ENV{'TZ'} = "JST-9";
	local($mday,$mon,$year) = (localtime(time))[3..5];
	$today = sprintf("%04d-%s-%s", $year+1900,$mon+1,$mday);

	# 翌月・前月を求める
	$next_y = $in{'y'};
	$next_m = $in{'m'}+1;
	if ($next_m > 12) { $next_y++; $next_m -= 12; }
	$back_y = $in{'y'};
	$back_m = $in{'m'}-1;
	if ($back_m < 1) { $back_y--; $back_m += 12; }

	# 当月の末日を求める
	$last = (31,28,31,30,31,30,31,31,30,31,30,31) [$in{'m'}-1]
	+ ($in{'m'} == 2 && (($in{'y'} % 4 == 0 && $in{'y'} % 100 != 0) ||
	$in{'y'} % 400 == 0));

	# 当月１日の週を求める
	$week = &getweek(1, $in{'y'}, $in{'m'});

	# 日の表示色を定義
	@col = ($sunCol,$norCol,$norCol,$norCol,$norCol,$norCol,$satCol,$holCol);

	# 表示テーブル開始
	print <<EOM;
<table border=0 cellspacing=0 cellpadding=2>
<tr>
  <td colspan=7 align=center><b>$in{'y'}/$in{'m'}</b></td>
</tr>
<tr>
EOM

	# 週を記述
	foreach $i (0 .. 6) {
		print "<td align=center style=\"font-size:$calSize\">$calwk[$i]</td>";
	}
	print "</tr><tr>";

	# 月初のブランクを記述
	foreach $i (0 .. 6) {
		last if ($i == $week);
		print "<td>&nbsp;</td>";
	}

	# 日テーブルをループする
	$flag=0;
	$mkey=0;
	foreach $i (1 .. $last) {

		# 週を認識
		if ($week > 0 && $week % 7 == 0) {
			print "</tr><tr>";
			$week=0;
		}

		# 第何月曜日か
		if ($week == 1) { $mkey++; }

		$md = sprintf("%02d%02d", $in{'m'},$i);
		$f=0;
		foreach $holi (@holiday) {
			if ($md eq $holi) { $f++; last; }
		}
		if ($week == 1) {
			while ( ($k,$v) = each(%holiday) ) {
				if ($in{'m'} == $k && $mkey == $v) {
					$f++; last;
				}
			}
		}
		if ($f) { $w = 7; } else { $w = $week; }

		if ($today eq "$in{'y'}-$in{'m'}-$i") {
			print "<td align=right class=cal bgcolor=\"$todCol\">";
		} else {
			print "<td align=right class=cal>";
		}

		# 記事有り
		$j = sprintf("%02d", $i);
		if (defined($cal{$j})) {
			print "<a href=\"$script?mode=popup&y=$in{'y'}&m=$in{'m'}&d=$i\" target=\"popwin\" onClick=\"popup(0)\"><font color=\"$col[$w]\"><b>$i</b></font></a>";
		} else {
			print "<font color=\"$col[$w]\">$i</font>";
		}
		print "</td>";
		$week++;
	}

	# 月末のブランクを記述
	while ( $week < 7 ) {
		print "<td>&nbsp;</td>";
		$week++;
	}

	# 月替えボタン
	print <<EOM;
</tr>
<tr>
  <td align=center colspan=7><br>
<a href="$script?mode=read&y=$back_y&m=$back_m"><img src="$imgurl/left.gif" alt="前月" border=0></a>
&nbsp;&nbsp;&nbsp;
<a href="$script?mode=read&y=$next_y&m=$next_m"><img src="$imgurl/right.gif" alt="翌月" border=0></a>
  </td>
</tr>
</table>
EOM
}

#-------------------------------------------------
#  ポップアップ画面
#-------------------------------------------------
sub popup {
	local($data,$d,$w,$sub,$msg,@t,@w,@h);

	# 汚染チェック
	$in{'y'} =~ s/\D//g;
	$in{'m'} =~ s/\D//g;
	$in{'d'} =~ s/\D//g;

	$data = sprintf("%04d%02d", $in{'y'},$in{'m'});

	open(IN,"$logdir/$data.txt");
	while (<IN>) {
		($d,$w,$sub,$msg,$t[0],$w[0],$h[0],
			$t[1],$w[1],$h[1],$t[2],$w[2],$h[2]) = split(/<>/);

		last if ($in{'d'} == $d);
	}
	close(IN);

	# 当月１日の週を求める
	$week = &getweek($in{'d'}, $in{'y'}, $in{'m'});

	&header;
	print <<EOM;
<div align="center">
<table width="$log_width"><tr><td class="log" align="$layout">
$in{'m'}月$in{'d'}日 ($week[$week]) &nbsp;<b>$sub</b><br><br>
$msg
EOM

	$f=0;
	foreach $i (0 .. 2) {
		if ($t[$i]) { $f++; } else { next; }
		$j = $i+1;
		print "<p>\n" if ($f == 1);

		if ($w[$i] && $h[$i]) { $wh = "width=$w[$i] height=$h[$i]"; }
		print "<a href=\"$imgurl/$data$d-$j$t[$i]\" target=\"_blank\"><img src=\"$imgurl/$data$d-$j$t[$i]\" border=0 alt=\"$data$d-$j$t[$i]\" $wh></a>\n";
	}
	print "</p>" if ($f);

	print <<EOM;
</td></tr></table>
<p>
<form>
<input type=button value=" 閉じる " onClick="window.close()">
</form>
</div>
</body>
</html>
EOM
	exit;
}

#-------------------------------------------------
#  デコード処理
#-------------------------------------------------
sub decode {
	local($buf,$key,$val);
	undef(%in);

	if ($ENV{'REQUEST_METHOD'} eq "POST") {
		read(STDIN, $buf, $ENV{'CONTENT_LENGTH'});
	} else {
		$buf = $ENV{'QUERY_STRING'};
	}

	foreach ( split(/&/, $buf) ) {
		($key, $val) = split(/=/);
		$val =~ tr/+/ /;
		$val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg;

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

		$in{$key} .= "\0" if (defined($in{$key}));
		$in{$key} .= $val;
	}
	$page = $in{'page'};
	$mode = $in{'mode'};

	$headflag=0;
}

#-------------------------------------------------
#  自動リンク
#-------------------------------------------------
sub auto_link {
	local($_) = @_;
	s/([^=^\"]|^)(https?\:[\w\.\~\-\/\?\&\=\@\;\#\:\%]+)/$1<a href=\"$2\" target=\"_blank\">$2<\/a>/g;
	$_;
}

#-------------------------------------------------
#  簡易チェック
#-------------------------------------------------
sub check {
	&header;
	print <<EOM;
<h3>Check Mode</h3>
<ul>
EOM

	# ディレクトリ定義
	%dir = ('ログディレクトリ', $logdir, '画像ディレクトリ', $imgdir);

	# チェック開始
	while (($k,$v) = each %dir) {
		# パス
		if (-d $v) {
			print "<li>$kパス: OK!\n";

			# パーミッション
			if (-r $v && -w $v && -x $v) {
				print "<li>$kパーミッション: OK!\n";
			} else {
				print "<li>$kパーミッション: NG → $v\n";
			}
		} else {
			print "<li>$kパス: NG → $v\n";
		}
	}

	if (-e "$logdir/index.dat") {
		print "<li>indexファイル: OK!\n";

		# パーミッション
		if (-r "$logdir/index.dat" && -w "$logdir/index.dat") {
			print "<li>indexファイルパーミッション: OK!\n";
		} else {
			print "<li>indexファイルパーミッション: NG → index.dat\n";
		}
	} else {
		print "<li>indexファイル: NG → index.dat\n";
	}

	print <<EOM;
<li>バージョン: $ver
</ul>
</body>
</html>
EOM
	exit;
}


__END__

