#!/usr/local/bin/perl
# ===================================================================
# EASY 情報掲示板 （EASY JOHO BBS Ver1.1)
# File Name: ezjoho.cgi
# Copyright; Hiroshi Ishikawa (e-mail; laut@tky.3web.ne.jp)
#            (URL; http://www.net-easy.com)
# Last Update: 2000/01/14
# EASY JOHO BBS Ver1.1は個人使用に限りフリーウェアです。
# 課金の発生する商用利用などはお問い合わせ下さい。
# また、改造は自由ですが、この欄は削除しないで下さい。
# ===================================================================
require './cgi-lib.pl';
require './jcode.pl';	
&ReadParse;
$title = 'WHAT IS NEW !?';
$max = 5;
$pmax = 3;
$home = 'http://factory-gorogoro.m78.com/mao_web/index.htm';
$password = 'jonathan';
# =====================================================================
$file = 'joho.txt';
if($in{'action'} eq "next_page"){
	&go_next;
}elsif($in{'action'} eq "go_pass"){
	if($in{'pass'} eq $password){
		&kanri_html;
	}else{
		&error(pass_er);
	}
}elsif($in{'action'} eq "sakujo"){
	if($in{'pass'} eq $password){
		&delete;
		&kanri_html;
	}else{
		&error(pass_er);
	}
}elsif($in{'action'} eq "kakikomi"){
	if($in{'pass'} eq $password){
		if($in{'kakunin'} eq "pre"){
			&preview;
		}elsif($in{'kakunin'} eq "kakutei"){
			&kakikomi;
			&kanri_html;
		}
	}else{
		&error(pass_er);
	}	
}else{
	&html;
}
# -------------------------------------------------------------
sub html {
	print "Content-type: text/html\n\n";
print <<EOM;
<HTML>
<HEAD>
<TITLE>$title</TITLE>
</HEAD>
<BODY bgcolor="#ffcc66">
<H2 align="center"><FONT face="Tahoma" color="#993300" size="3">$title</FONT></H2>
<HR size="3" width="80%">
<P align="right">
<A href="$home"><FONT face="Tahoma" color="#993300" size="-1">HOME PAGE</FONT></A>
</P>
EOM

	$i = 0;
	&read_file;

	$okuri = $i;	#次のページの最初に読み出す行になる

	print "<DIV align=\"left\">\n";
	print "全$count件が記録されています。<BR>\n";
	print "<FONT size=2>１ページに\n";
	print "$pmax件ずつ表\示されます</FONT>\n";

	if($count > $pmax){
print <<EOM;
<TABLE border="0" cellspacing="0">
  <TR>
    <TD>
    <FORM action="ezjoho.cgi" method="POST">
    <INPUT type="hidden" name="action" value="next_page">
    <INPUT type="hidden" name="okuri" value="$okuri">
    <INPUT type="hidden" name="inistart" value="0">
<INPUT type="submit" value="次のページ">
    </FORM>
</TD>
</TR>
</TABLE>
EOM
	}

print <<EOM;
</DIV>
<TABLE border="0" cellspacing="0" width="100%">
  <TR>
    <TD align="left" valign="top"><FONT face=""Tahoma" color="#993300"" size="-1"><A href="$home">HOME PAGE</A></FONT></TD>
    <TD align="right" valign="top">
    <FORM action="ezjoho.cgi" method="POST">
    <INPUT type="hidden" name="action" value="go_pass">
<INPUT type="submit" value="管理用"><INPUT type="password" name="pass" size="15">
    </FORM>
</TD></TR>
</TABLE>
EOM

# ここから下６行は削除しないで下さい(Copyright)
print <<EOM;
<H5 align="right"><A href="http://www.net-easy.com/">
EasyJoho Ver1.1</A></H5>
</BODY>
</HTML>
EOM
}

# ---------------------------------------------------------------
sub go_next{
	if($in{'modori'} eq '0'){
		&html;
	}else{
	print "Content-type: text/html\n\n";
print <<EOM;
<HTML>
<HEAD>
<TITLE>$title</TITLE>
</HEAD>
<BODY bgcolor="#ffcc66">
<H2 align="center"><FONT face="Tahoma" color="#993300" size="3">$title</FONT></H2>
<HR>
EOM

	if($in{'okuri'} ne ''){
		$i = $in{'okuri'};
		$ini = $i;	#このページの最初の行
	}elsif($in{'modori'} ne ''){
		$i = $in{'modori'};
		$ini = $i;
	}

	&read_file;

	$okuri = $i;	#次のページの最初に読み出す行になる
	$modori = ($ini - $pmax);    #前のページの最初に読み出す行
	$ini_end = ($i - 1);	#このページの最後の行
	$ini_end_view = $ini_end + 1;
print <<EOM;
<DIV align="left">
全$count件中、このページには$ini件〜$ini_end_view件を\表\示しています<BR>
<TABLE border=0>
  <TR>
    <TD>
    <FORM action="ezjoho.cgi" method="POST">
    <INPUT type="hidden" name="action" value="next_page">
    <INPUT type="hidden" name="modori" value="$modori">
<INPUT type="submit" value="前のページ">
    </FORM>
</TD>
<TD>
EOM
	if($i eq $count){
		print "<FONT size=\"2\">このページが最後です</FONT>\n";
	}else{
		print "<FORM action=\"ezjoho.cgi\" method=\"POST\">\n";
		print "<INPUT type=\"hidden\" name=\"action\" value=\"next_page\">\n";
		print "<INPUT type=\"hidden\" name=\"okuri\" value=\"$okuri\">\n";
		print "<INPUT type=\"submit\" value=\"次のページ\">\n";
		print "<\/FORM>\n";
	}

print <<EOM;
</TD>
<TD>
    <FORM action="ezjoho.cgi" method="POST">
<INPUT type="submit" value="最新ページ">
    </FORM>
</TD></TR>
</TABLE>
</DIV>
</BODY>
</HTML>
EOM
	}
}

# --------------------------------------------------------------------------------
sub read_file{
	if(!open(OUT,"$file")){&error(file_er);}
	flock(OUT,2);
	@DATA = <OUT>;
	flock(OUT,8);
	close(OUT);

	$count = @DATA;
	if($count < $pmax){
		$pmax_new = $count;
	}elsif(($count - $i) < $pmax){
		$pmax_new = ($count - $i);
	}else{
		$pmax_new = $pmax;
	}
	while($pmax_new > 0){
		($cnt,$date,$subject,$comment) = split(/\,/,$DATA[$i]);

print <<EOM;
<CENTER>
<TABLE width="95%" >
  <TR>
    <TH width="70%" bgcolor="#ffcc33"><FONT size="3"><FONT color="#cc6600">$subject</FONT></FONT></TH>
    <TD align="left" bgcolor="#ffcc33"><FONT color="#cc6600">$date</FONT></TD></TR>
  <TR>
    <TD colspan="2" bgcolor="#ffff99">$comment</TD></TR>
</TABLE>

</CENTER>
<BR>
EOM

		$i ++;
		$pmax_new --;
	}
}

# ------------------------------------------------------------------------------------------
# 管理者フォームHTML出力サブルーチン
sub kanri_html {
	print "Content-type: text/html\n\n";
print <<EOM;
<HTML>
<HEAD>
<TITLE>管理者用画面</TITLE>
</HEAD>
<BODY bgcolor="#ffcc66">
<H2>管理者用画面</H2>
<P>
一般画面に
<A HREF="ezjoho.cgi">戻る</A>
</P>
<FORM action="ezjoho.cgi" method="POST">
<INPUT type="hidden" name="action" value="kakikomi">
<INPUT type="hidden" name="pass" value="$in{'pass'}">
<B>タイトル：</B><INPUT name="dai" size="50"><BR>
<B>コメント：</B>（HTMLタグも使えます）<B><BR>
</B>
<TEXTAREA name="comment" rows="5" cols="85">
</TEXTAREA>
<BR>
<BR>
<INPUT type="radio" name="kakunin" value="pre" checked>プレビュー　　<INPUT type="radio" name="kakunin" value="kakutei">確定<BR>
<BR>
<INPUT type="submit" value="送信する">　<INPUT type="reset" value="RESET">
</FORM>
<HR>
<B>削除する記事をチェックして「削除する」を押して下さい</B>
<BR>
<FORM action="ezjoho.cgi" method="POST">
<INPUT type="hidden" name="action" value="sakujo">
<INPUT type="hidden" name="pass" value="$in{'pass'}">
<INPUT type="submit" value="削除する"> <INPUT type="reset" value="Reset"><BR><BR>
EOM

	if(!open(OUT,"$file")){&error(file_er);}
	flock(OUT,2);
	@DATA = <OUT>;
	flock(OUT,8);
	close(OUT);
	$count = @DATA;
	$i = 0;
	while($count > 0){
		($cnt,$date,$subject,$comment) = split(/\,/,$DATA[$i]);
		print "<INPUT type=\"checkbox\" name=\"delete\" value=\"$cnt\">$date,$subject,$comment<BR>\n";
		$i ++;
		$count --;
	}

print <<EOM;
</FORM>
</BODY>
</HTML>
EOM
}

# ------------------------------------------------------------------------------
# 削除サブルーチン
sub delete{
	if(!open(OUT,"$file")){&error(file_er);}
	flock(OUT,2);
	@DATA = <OUT>;
	flock(OUT,8);
	close(OUT);
	$count = @DATA;

	@code = split(/\0/,$in{'delete'});
	$countcode = @code;

	$i = 0;
	$j = 0;

	while(($count > 0) || ($countcode > $j)){
		($cnt,$date,$subject,$comment) = split(/\,/,$DATA[$i]);
	
		if($cnt eq $code[$j]){
			$DATA[$i] = '';
			$j ++;
		}
	
		$i ++;
		$count --;
	}

	if(!open(OUT,">$file")){&error(file_er);}
	flock(OUT,2);
	print OUT @DATA;
	flock(OUT,8);
	close(OUT);

}

# -----------------------------------------------------------------------------
# 書き込みサブルーチン
sub kakikomi {
	$dai = $in{'dai'};
	$in_comment = $in{'comment'};

	&jcode'convert(*in_comment,"sjis");
	&jcode'convert(*dai,"sjis");

	$in_comment =~ s/\n/<BR>/g;
	$in_comment =~ s/\r//g;
	$in_comment =~ s/\"//g;
	$in_comment =~ s/,//g;
	$in_comment =~ s/\,/\./g;
	$dai =~ s/\"//g;
	$dai =~ s/\,/\./g;


	# 時間の取得
	($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime;
	$mon++;
	@week = ('日','月','火','水','木','金','土');
	$wday = $week[$wday];
	$mon = sprintf("%.2d",$mon);
	$mday = sprintf("%.2d",$mday);
	$hour = sprintf("%.2d",$hour);
	$min = sprintf("%.2d",$min);
	$sec = sprintf("%.2d",$sec);

	$year = substr($year,1,2);

	if(!open(OUT,"$file")){&error(file_er);}
	flock(OUT,2);
	$line1 = <OUT>;
	flock(OUT,8);
	close(OUT);
	

	if($dai eq ''){
		&error(dai_er);
	}elsif($in_comment eq ''){
		&error(comment_er);
	}else{
	($cnt,$date,$subject,$comment) = split(/\,/,$line1);
	$cnt ++;

	$new_comment = "$cnt,$year/$mon/$mday($wday)$hour:$min:$sec,$dai,$in_comment\n";
	if(!open(OUT,"$file")){&error(file_er);}
	flock(OUT,2);
	@DATA = <OUT>;
	flock(OUT,8);
	close(OUT);

	unshift(@DATA,$new_comment);
	$i = 0;
	foreach $line(@DATA){
		$i ++;
		if($i > $max){last;}
		push(@NEWDATA,$line);
	}

	if(!open(IN,">$file")){&error(file_er);}
	flock(IN,2);
	print IN @NEWDATA;
	flock(IN,8);
	close(IN);
	}
}

# ----------------------------------------------------------------------------------
# プレビュー画面サブルーチン
sub preview {
	$dai = $in{'dai'};
	$in_comment = $in{'comment'};

	&jcode'convert(*in_comment,"sjis");
	&jcode'convert(*dai,"sjis");

	$in_comment =~ s/\n/<BR>/g;
	$in_comment =~ s/\r//g;
	$in_comment =~ s/\"//g;
	$in_comment =~ s/\,/\./g;
	$dai =~ s/\,/\./g;
	$dai =~ s/\"//g;


	# 時間の取得
	($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime;
	$mon++;
	@week = ('日','月','火','水','木','金','土');
	$wday = $week[$wday];
	$mon = sprintf("%.2d",$mon);
	$mday = sprintf("%.2d",$mday);
	$hour = sprintf("%.2d",$hour);
	$min = sprintf("%.2d",$min);
	$sec = sprintf("%.2d",$sec);

	$str_length = length($year);
	if($str_length > 2){
		$year = substr($year,1,2);
	}

	print "Content-type: text/html\n\n";
	print "<HTML><HEAD><TITLE>PREVIEW</TITLE></HEAD>\n";
	print "<BODY bgcolor=\"#ffffff\">\n";
	print "<H2 align=center>プレビュー画面</H2>\n";
	print "<CENTER>\n<TABLE width=\"95\%\">\n<TR>\n";
	print "<TH width=\"70\%\" bgcolor=\"#80ffff\"><FONT size=\"+1\"><B>\n";
	print "<FONT color=\"#000000\">$dai</FONT></B></FONT></TH>\n";
	print "<TD align=\"left\" bgcolor=\"#ffffff\"><FONT color=\"#0080ff\"><B><FONT color=\"#0000d5\">\n";
	print "$year/$mon/$mday($wday)$hour:$min:$sec</FONT></B></FONT></TD></TR>\n";
	print "<TR>\n<TD colspan=\"2\" bgcolor=\"#f9f9f9\">$in_comment</TD></TR>\n</TABLE>\n";
	print "</CENTER>\n<HR noshade size=\"1\" width=\"98\%\">\n";

print <<EOM;
<P align="center">
変更する場合は<A href="javascript:history.back()">ここをクリック</A>して戻る
</P>
<P align="center">
<FONT size="+1">確定して送信するときは下のボタンを押して下さい</FONT>
</P>
<CENTER>
<TABLE>
  <TR>
    <TD>
    <FORM action="ezjoho.cgi" method="POST">
    <INPUT type="hidden" name="action" value="kakikomi">
    <INPUT type="hidden" name="pass" value="$in{'pass'}">
    <INPUT type="hidden" name="kakunin" value="kakutei">
    <INPUT type="hidden" name="dai" value="$in{'dai'}">
    <INPUT type="hidden" name="comment" value="$in_comment">
<INPUT type="submit" value="確定して送信">
    </FORM>
</TD></TR>
</TABLE>

</CENTER>
</BODY>
</HTML>
EOM
}

# -----------------------------------------------------------------------------
# エラーサブルーチン
sub error{
	$error = $_[0];
	if($error eq "comment_er"){
		$msge = 'コメントが正しく記入されていません';
	}elsif($error eq "dai_er"){
		$msge = 'タイトルを記入して下さい';
	}elsif($error eq "file_er"){
		$msge = '記録ファイルをオープン出来ません';
	}else{
		$msge = 'パスワードが違います';
	}

	print "Content-type: text/html\n\n";
	print "<HTML><HEAD><TITLE>ERROR</TITLE></HEAD>\n";
	print "<BODY bgcolor=\"#ffffff\">\n";
	print "<H1 align=\"center\">$msge</H1><HR>\n";
	print "<A href=\"javascript:history.back()\">BACK</A></BODY></HTML>\n";

	exit;
}





