#!/usr/bin/perl
# ■そのとき日記システム(笑) Version 0.1a
#           Programed by Shivat
#
#  変更履歴
#     2002/12/25 Version0.1a クリスマスの現実逃避に作ってみる。
#     2002/12/26 Version0.2a 前後月を読めるようにした。
#                            入力画面にパスワード設定してみる。
#     2003/01/06 Version0.3a 裏日記対応。あとソースをちょいといじってみる。
#     2003/01/14 Version0.3b パスワード入力フォームをトップにも置いてみる。
#     2003/01/16 Version0.3c 日付周りのバグfix
#     2003/02/01 Version0.3d 日付周りのバグfixその２

#
# とりあえず直すところ
#   今のところなし^^v

# システムの設定はsetting.plをいじってみて下さい。

$version = "0.3d";
$system_name = "そのとき日記システム(笑)";

require 'setting.pl';
require "jcode.pl";

# とりあえずセキュリティ対策
# GET Methodでの書き込みに対応しておく。
#if($ENV{"REQUEST_METHOD"} eq "GET") {
#	&print_header;
#   print "<font color=$fontcolor_system size=+1><b>GETで書いちゃだめですよ。</b></font><br>\n";
#	&print_footer;
#	exit;
#}
# 大量の書き込みに対応しておく。
if($ENV{"CONTENT_LENGTH"} > $title_max + $data_max){
	&print_header;
   print "<font color=$fontcolor_system size=+1><b>書きすぎ…。</b></font><br>\n";
	&print_footer;
	exit;
}

# フォームからデータ取得
%form = &read_input('euc');
$input_mode = $form{'mode'};
$input_title = $form{'title'};
$input_year = $form{'year'};
$input_month = $form{'month'};
$input_day = $form{'day'};
$input_ura = $form{'ura'};
$input_data = $form{'data'};
$input_passwd = $form{'passwd'};
$next_y = $form{'next_y'};
$next_m = $form{'next_m'};

# mode none: 表日記表示
#         1: 書き込みページ
#         2: 書き込み確認
#         4: 裏日記表示

if( $input_passwd eq $passwd ){ $mode = 0; &input_page; }
elsif( $input_passwd eq $passwd_ura ){ $mode = 1; &view_diary; }
elsif ( $input_mode == 2 ){ &regist_page; }
#elsif ( $input_mode == 3 ){ &write_file }
else{ &view_diary; }

exit;


# 日記表示
sub view_diary{
	# とりあえず現在時刻取得
	&get_time;

	if ( $next_y == '' ){
		$view_year = $system_year;
		$view_month = $system_mon;
	}else{
		$view_year = $next_y;
		$view_month = $next_m;
		if( $view_month < 10 ){ $view_month = "0$view_month";}
	}

	&print_header;
	&view_diary2;
	&print_footer;
}

# 日記表示本体
sub view_diary2{

	# 今月のリスト作成
	chdir($logdir);
	@files = glob("$view_year$view_month??.dat");
	@files_rev = reverse( @files );

	# 年月の繰り上げ、繰り下げ処理(なんかスマートじゃないわ(汗))
	if( $view_month == 12 ){ $n_year = $view_year + 1; $n_month =  1; $p_year = $view_year; $p_month = $view_month - 1;}
	elsif( $view_month ==  1 ){ $p_year = $view_year - 1; $p_month = 12; $n_year = $view_year; $n_month = $view_month + 1;}
	else{ $p_year = $view_year; $p_month = $view_month - 1; $n_year = $view_year; $n_month = $view_month + 1;}

	# HTML表示
	print "<table width=90% align=center>\n";
	print "<tr><td><table><tr><td><form action=./nikki.cgi method=post><input type=password name=passwd size=8></td>\n";
	print "    <td><input type=submit value=Login></form></td></tr></table></td>\n";
	print "    <td colspan=2 align=right><a href=$returnto>戻る。</a></td></tr>\n";

	# 未来日記にはいけません。
	if( $view_month == $system_mon && $view_year == $system_year ){
		print "<tr><td align=left width=33%><br></td>\n"; 
	}else{
		print "<tr><td align=left width=33%><form action=./nikki.cgi method=post><input type=submit value=\"<<$n_year年$n_month月\">\n";
		print "    <input type=hidden name=next_y value=$n_year><input type=hidden name=next_m value=$n_month></form></td>\n";
	}
	print "    <td align=center><font color=$fontcolor_data size=+1><b>$view_year年$view_month月の日記</b></font></td>\n";
	print "    <td align=right width=33%><form action=./nikki.cgi method=post><input type=submit value=\"$p_year年$p_month月>>\">\n";
	print "    <input type=hidden name=next_y value=$p_year><input type=hidden name=next_m value=",$p_month,"></form></td></tr>\n";
	print "</table>\n\n";

	print "<table width=90% cellpadding=0 cellspaceing=0 align=center>";

	if( @files_rev != '' ){

		# ファイルリスト読み込み
		foreach $data_file ( @files_rev ){
			open(READFILE,"$data_file");
			while(<READFILE>){
				# ファイルから変数への読み込み部分
				($fget_year, $fget_month, $fget_mday, $fget_hour, $fget_min, $fget_sec, $fget_title, $fget_data, $fget_ura) = split('\t',$_,9);
				$fget_date = "$fget_year/$fget_month/$fget_mday";
				$fget_time = "$fget_hour:$fget_min:$fget_sec";

				# １度表示した日付は表示しない。
				# でも、内容は表示したい…
				if( $fget_date ne $date_old ){
					print "<tr><td colspan=3><hr></td></tr>\n";
					$fget_date =~ s/\n//g;
					print "<tr><td colspan=3><b><font color=$fontcolor_date>$fget_date</font></b><br></td></tr>\n";
				}

				# 日記内容の表示（裏モード対応）
				# 裏フラグ($fget_ura ==1) && 裏モード($mode == 1)で裏日記表示
				if( $fget_ura != 1 ){&view_diary2_body;}
				elsif( $mode == 1 ){&view_diary2_body;}

				# 表示した日記の日付情報の保存
				$date_old = $fget_date;

			}
		}
		# ファイルのクローズ＆後処理
		close(READFILE);
	}else{
	print "<tr><td colspan=3><hr></td></tr>\n";
	print "<tr><td colspan=3><font color=$fontcolor_system><b>$view_year年$view_month月の日記はありません。</b></font></td></tr>\n";}
	print "<tr><td colspan=3><hr></td></tr>\n";
	print "</table>\n";

}

# 各日記の表示
sub view_diary2_body{
	print "<tr><td width=3% rowspan=2 nowrap>　　<br></td>\n";

	if( $fget_ura == 1 ){print "    <td colspan=2><font color=$fontcolor_title_ura><b>$head$fget_title</b>(裏日記)</font></td></tr>\n";}
	else{print "    <td colspan=2><font color=$fontcolor_title>$head$fget_title</font></td></tr>\n";}

	print "<tr><td width=5% nowrap>　　<br></td>\n";
	$fget_data =~ s/\n//g;
	print "    <td><font color=$fontcolor_data>$fget_data</font></b></td></tr>\n";
#	print "<tr><td colspan=3 align=right><b><font color=$fontcolor_time>($fget_time)</font></td></tr>\n";
	print "<tr><td colspan=3 nowrap>　　<br></td></tr>\n";
}

# ファイル書き込み
sub regist_page{
	# 時刻取得
	&get_time;
	$datafile = "$logdir$input_year$input_month$input_day.dat";
	
	# ファイルの読み込み
	open(READFILE,$datafile);
	@buf = <READFILE>;
	close(READFILE);

	open(DATAOUT,">$datafile");

	# タグを取る。
	$input_data =~ s/\</&lt;/g; $value =~ s/\</&lt;/g;
	$input_data =~ s/\>/&gt;/g; $value =~ s/\>/&gt;/g;
	$input_data =~ s/\"/&quot;/g; $value =~ s/\"/&quot;/g;

	# 改行を<br>タグに変換
	$input_data =~ s/\r\n/<br>/g;

	# URLの自動リンク
	$input_data =~ s/(http\:\/\/[\w\/\.\~\-\_\?\&\+\=\#\@\:\;]+)/<a href="\1">\1<\/a>/g;
	$input_data =~ s/(https\:\/\/[\w\/\.\~\-\_\?\&\+\=\#\@\:\;]+)/<a href="\1">\1<\/a>/g;
	$input_data =~ s/(ftp\:\/\/[\w\/\.\~\-\_\?\&\+\=\#\@\:\;]+)/<a href="\1">\1<\/a>/g;
	$input_data =~ s/(news\:\/\/[\w\/\.\~\-\_\?\&\+\=\#\@\:\;]+)/<a href="\1">\1<\/a>/g;

	# 出力形式に整形
	$output = "$input_year\t$input_month\t$input_day\t$system_hour\t$system_min\t$system_sec\t$input_title\t$input_data\t$input_ura\n";
	print DATAOUT $output;
	print DATAOUT @buf;

	close(DATAOUT);

	# HTML表示
	&print_header;
	print "<table align=center width=90%>\n";
	print "<tr><td><font color=$fontcolor_system><b>■以下の内容を追加しました。</b></td><td align=right><form action=./nikki.cgi method=post><input type=submit value=\"書きこみ終了\"></form></font></td></tr>\n";
	print "<tr><td colspan=2><table width=100% border><tr><td><table width=100% border=0>\n";
	print "        <tr><td colspan=2><font color=$fontcolor_system>$head$input_title</font></td></tr>\n";
	print "        <tr><td width=5%><br></td><td><font color=$fontcolor_system>$input_data</font></td></tr>\n";
	print "        </table></td></tr></table>\n";
	print "</table>\n";

	$view_year = $system_year;
	$view_month = $system_mon;
	# 裏日記書きこみ時には表示を強制的に裏モードにする。
	if( $input_ura == 1 ){ $mode = 1;}
	&view_diary2;
	&print_footer;
}

# 入力ページ
sub input_page{
	# 時刻取得
	&get_time;


	# HTML表示
	$title_zen = $title_max / 2;
	$data_zen = $data_max / 2;
	&print_header;
	print <<INPUTFORM_;
<font color=$fontcolor_data>■タイトルは全角で$title_zen文字、内容は$data_zen文字まで書けます。それ以上は…知りません</font><br>
<font color=$fontcolor_data>■URLは自動的にリンクしてくれます。</font><br>
<font color=$fontcolor_data>■残念ながらタグは使えません。</font>
<form action=./nikki.cgi method=post>
<table>
<tr><td><font color=$fontcolor_data>日付</font></td>
<td><input type=text size=4 name=year value=$system_year maxlength=4><font color=$fontcolor_data>年<input type=text size=2 name=month value=$system_mon maxlength=2>月<input type=text size=2 name=day value=$system_mday maxlength=2>日 ($system_wday曜日)</font></td></tr>
<tr><td><font color=$fontcolor_data>タイトル</font></td>
    <td><input type=text size=60 name=title maxlength=$title_max></td></tr>
<tr><td valign=top><font color=$fontcolor_data>内容</font></td>
    <td><textarea rows=10 cols=60 name=data maxlength=$data_max></textarea></td></tr>
<tr><td></td><td><input type=radio name=ura value=0 checked><font color=$fontcolor_data>内緒にしない</font>　<input type=radio name=ura value=1><font color=$fontcolor_data>内緒にしとく（とりあえず使えそう)</font></td></tr>
<input type=hidden name=mode value=2>
<tr><td colspan=2><input type=submit value=\"書き込み\"> <input type=reset value=\"リセット\"></form></td></tr>
</table>
</body>
</html>
INPUTFORM_
}

# 現在時刻取得
sub get_time{
	($system_sec,$system_min,$system_hour,$system_mday,$system_mon,$system_year,$system_wday,$system_yday,$system_isdst) = localtime(time);
	$system_mon = ($system_mon + 1);
	if ($system_mon < 10)   { $system_mon   = "0$system_mon"; }
	if ($system_mday < 10)  { $system_mday  = "0$system_mday";  }
	if ($system_sec < 10)   { $system_sec   = "0$system_sec";   }
	if ($system_min < 10)   { $system_min   = "0$system_min";   }
	if ($system_hour < 10)  { $system_hour  = "0$system_hour";  }
	$system_year = ($system_year + 1900 );
	$system_wday = ('日','月','火','水','木','金','土')[$system_wday];
	$date_now = "$year年$month月$mday日($wday曜日)";
}

# HTMLヘッダ出力
sub print_header{
	print <<HEADER_;
Content-type: text/html


<html><head><title></title>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=EUC-JP\"></head>
<body bgcolor=$bg_color>
HEADER_
}

# HTMLフッタ出力
sub print_footer{
	print <<FOOTER_;

<table width=90% align=center cellpadding=0 cellspacing=0>
<tr><td align=right><font color=$fontcolor_system>$system_name Version $version</font></td></tr>
</table>
</body></html>
FOOTER_
}
