#! /usr/local/bin/perl

#
#	くずはすくりぷと Final Beta #3 (Preview Release 2)
#	 (過去ログビューアー)
#	
#	
#	※ログ商人さんの Getlog Ver0.3b4.0921 (通常版及び月単位保存ログ対応版)
#	  の改造版です
#


###############################################################################
#  過去ログリスト表示
###############################################################################

sub oldloglist {
	
	my ( @files, @check, $fsize, $ftime, $chedked );
	
	opendir ( DIR, $oldlogfiledir ) || &prterror ( 'ディレクトリが開けませんでした' );
	@files = readdir ( DIR );
	closedir ( DIR );
	@files = sort { $a <=> $b; } @files;
	
	
	print <<EOF;
<P align="center"><STRONG>$bbstitle 過去ログ一覧</STRONG></P>

<DIV align="center">
  <FORM method="get" action="$cgiurl">
    <INPUT type="hidden" name="mode" value="getlog">
    <TABLE border="0">
      <TR>
        <TD align="center" valign="top">
          <TABLE border="0" cellpadding="3">
            <TR>
              <TD>　</TD>
              <TH>ファイル名</TH>
              <TH>サイズ</TH>
            </TR>
EOF
	
	$check[@files - 1] = ' checked';
	for ( $i = 0 ; $i < @files ; $i++ ) {
		if ( $files[$i] ne '.' && $files[$i] ne '..' ) {
			$fsize = -s "$oldlogfiledir$files[$i]";
			$checked = " checked" if ( $i == @files - 1 );
			print <<EOF;
            <TR>
              <TD align="center"><INPUT type="radio" name="file" value="$files[$i]"$check[$i]></TD>
              <TD align="center"><A href="$cgiurl?mode=getlog&file=$files[$i]">$files[$i]</A></TD>
              <TD align="right">$fsize</TD>
            </TR>
EOF
		}
	}
	
	print <<EOF;
          </TABLE>
        </TD>
        <TD>　　　</TD>
        <TD align="center" valign="top">
          <TABLE border="0" cellpadding="3">
            <TR>
              <TH colspan="2">表\示・検索オプション</TH>
            </TR>
            <TR>
EOF
	if ( $oldlogsavesw == 0 ) {
		print <<EOF;
              <TD align="center" valign="top">投稿時刻</TD>
              <TD>
                <SELECT name="s1" size="1">
                  <OPTION value="0">0</OPTION>
                  <OPTION value="1">1</OPTION>
                  <OPTION value="2">2</OPTION>
                  <OPTION value="3">3</OPTION>
                  <OPTION value="4">4</OPTION>
                  <OPTION value="5">5</OPTION>
                  <OPTION value="6">6</OPTION>
                  <OPTION value="7">7</OPTION>
                  <OPTION value="8">8</OPTION>
                  <OPTION value="9">9</OPTION>
                  <OPTION value="10">10</OPTION>
                  <OPTION value="11">11</OPTION>
                  <OPTION value="12">12</OPTION>
                  <OPTION value="13">13</OPTION>
                  <OPTION value="14">14</OPTION>
                  <OPTION value="15">15</OPTION>
                  <OPTION value="16">16</OPTION>
                  <OPTION value="17">17</OPTION>
                  <OPTION value="18">18</OPTION>
                  <OPTION value="19">19</OPTION>
                  <OPTION value="20">20</OPTION>
                  <OPTION value="21">21</OPTION>
                  <OPTION value="22">22</OPTION>
                  <OPTION value="23">23</OPTION>
                </SELECT> 時 
                <SELECT name="e1" size="1">
                  <OPTION value="0">00</OPTION>
                  <OPTION value="5">05</OPTION>
                  <OPTION value="10">10</OPTION>
                  <OPTION value="15">15</OPTION>
                  <OPTION value="20">20</OPTION>
                  <OPTION value="25">25</OPTION>
                  <OPTION value="30">30</OPTION>
                  <OPTION value="35">35</OPTION>
                  <OPTION value="40">40</OPTION>
                  <OPTION value="45">45</OPTION>
                  <OPTION value="50">50</OPTION>
                  <OPTION value="55">55</OPTION>
                </SELECT> 分 から<BR>
                <SELECT name="s2" size="1">
                  <OPTION value="24">24</OPTION>
                  <OPTION value="0">0</OPTION>
                  <OPTION value="1">1</OPTION>
                  <OPTION value="2">2</OPTION>
                  <OPTION value="3">3</OPTION>
                  <OPTION value="4">4</OPTION>
                  <OPTION value="5">5</OPTION>
                  <OPTION value="6">6</OPTION>
                  <OPTION value="7">7</OPTION>
                  <OPTION value="8">8</OPTION>
                  <OPTION value="9">9</OPTION>
                  <OPTION value="10">10</OPTION>
                  <OPTION value="11">11</OPTION>
                  <OPTION value="12">12</OPTION>
                  <OPTION value="13">13</OPTION>
                  <OPTION value="14">14</OPTION>
                  <OPTION value="15">15</OPTION>
                  <OPTION value="16">16</OPTION>
                  <OPTION value="17">17</OPTION>
                  <OPTION value="18">18</OPTION>
                  <OPTION value="19">19</OPTION>
                  <OPTION value="20">20</OPTION>
                  <OPTION value="21">21</OPTION>
                  <OPTION value="22">22</OPTION>
                  <OPTION value="23">23</OPTION>
                </SELECT> 時
                <SELECT name="e2" size="1">
                  <OPTION value="0">00</OPTION>
                  <OPTION value="5">05</OPTION>
                  <OPTION value="10">10</OPTION>
                  <OPTION value="15">15</OPTION>
                  <OPTION value="20">20</OPTION>
                  <OPTION value="25">25</OPTION>
                  <OPTION value="30">30</OPTION>
                  <OPTION value="35">35</OPTION>
                  <OPTION value="40">40</OPTION>
                  <OPTION value="45">45</OPTION>
                  <OPTION value="50">50</OPTION>
                  <OPTION value="55">55</OPTION>
                </SELECT> 分 まで
EOF
	} else {
		print <<EOF;
              <TD align="center" valign="top">投稿日時</TD>
              <TD>
                <SELECT name="s1" size="1">
                  <OPTION value="1">1</OPTION>
                  <OPTION value="2">2</OPTION>
                  <OPTION value="3">3</OPTION>
                  <OPTION value="4">4</OPTION>
                  <OPTION value="5">5</OPTION>
                  <OPTION value="6">6</OPTION>
                  <OPTION value="7">7</OPTION>
                  <OPTION value="8">8</OPTION>
                  <OPTION value="9">9</OPTION>
                  <OPTION value="10">10</OPTION>
                  <OPTION value="11">11</OPTION>
                  <OPTION value="12">12</OPTION>
                  <OPTION value="13">13</OPTION>
                  <OPTION value="14">14</OPTION>
                  <OPTION value="15">15</OPTION>
                  <OPTION value="16">16</OPTION>
                  <OPTION value="17">17</OPTION>
                  <OPTION value="18">18</OPTION>
                  <OPTION value="19">19</OPTION>
                  <OPTION value="20">20</OPTION>
                  <OPTION value="21">21</OPTION>
                  <OPTION value="22">22</OPTION>
                  <OPTION value="23">23</OPTION>
                  <OPTION value="24">24</OPTION>
                  <OPTION value="25">25</OPTION>
                  <OPTION value="26">26</OPTION>
                  <OPTION value="27">27</OPTION>
                  <OPTION value="28">28</OPTION>
                  <OPTION value="29">29</OPTION>
                  <OPTION value="30">30</OPTION>
                  <OPTION value="31">31</OPTION>
                </SELECT> 日
                <SELECT name="e1" size="1">
                  <OPTION value="0">0</OPTION>
                  <OPTION value="1">1</OPTION>
                  <OPTION value="2">2</OPTION>
                  <OPTION value="3">3</OPTION>
                  <OPTION value="4">4</OPTION>
                  <OPTION value="5">5</OPTION>
                  <OPTION value="6">6</OPTION>
                  <OPTION value="7">7</OPTION>
                  <OPTION value="8">8</OPTION>
                  <OPTION value="9">9</OPTION>
                  <OPTION value="10">10</OPTION>
                  <OPTION value="11">11</OPTION>
                  <OPTION value="12">12</OPTION>
                  <OPTION value="13">13</OPTION>
                  <OPTION value="14">14</OPTION>
                  <OPTION value="15">15</OPTION>
                  <OPTION value="16">16</OPTION>
                  <OPTION value="17">17</OPTION>
                  <OPTION value="18">18</OPTION>
                  <OPTION value="19">19</OPTION>
                  <OPTION value="20">20</OPTION>
                  <OPTION value="21">21</OPTION>
                  <OPTION value="22">22</OPTION>
                  <OPTION value="23">23</OPTION>
                </SELECT> 時 から<BR>
                <SELECT name="s2" size="1">
                  <OPTION value="1">1</OPTION>
                  <OPTION value="2">2</OPTION>
                  <OPTION value="3">3</OPTION>
                  <OPTION value="4">4</OPTION>
                  <OPTION value="5">5</OPTION>
                  <OPTION value="6">6</OPTION>
                  <OPTION value="7">7</OPTION>
                  <OPTION value="8">8</OPTION>
                  <OPTION value="9">9</OPTION>
                  <OPTION value="10">10</OPTION>
                  <OPTION value="11">11</OPTION>
                  <OPTION value="12">12</OPTION>
                  <OPTION value="13">13</OPTION>
                  <OPTION value="14">14</OPTION>
                  <OPTION value="15">15</OPTION>
                  <OPTION value="16">16</OPTION>
                  <OPTION value="17">17</OPTION>
                  <OPTION value="18">18</OPTION>
                  <OPTION value="19">19</OPTION>
                  <OPTION value="20">20</OPTION>
                  <OPTION value="21">21</OPTION>
                  <OPTION value="22">22</OPTION>
                  <OPTION value="23">23</OPTION>
                  <OPTION value="24">24</OPTION>
                  <OPTION value="25">25</OPTION>
                  <OPTION value="26">26</OPTION>
                  <OPTION value="27">27</OPTION>
                  <OPTION value="28">28</OPTION>
                  <OPTION value="29">29</OPTION>
                  <OPTION value="30">30</OPTION>
                  <OPTION value="31" selected>31</OPTION>
                </SELECT> 日
                <SELECT name="e2" size="1">
                  <OPTION value="24">24</OPTION>
                  <OPTION value="0">0</OPTION>
                  <OPTION value="1">1</OPTION>
                  <OPTION value="2">2</OPTION>
                  <OPTION value="3">3</OPTION>
                  <OPTION value="4">4</OPTION>
                  <OPTION value="5">5</OPTION>
                  <OPTION value="6">6</OPTION>
                  <OPTION value="7">7</OPTION>
                  <OPTION value="8">8</OPTION>
                  <OPTION value="9">9</OPTION>
                  <OPTION value="10">10</OPTION>
                  <OPTION value="11">11</OPTION>
                  <OPTION value="12">12</OPTION>
                  <OPTION value="13">13</OPTION>
                  <OPTION value="14">14</OPTION>
                  <OPTION value="15">15</OPTION>
                  <OPTION value="16">16</OPTION>
                  <OPTION value="17">17</OPTION>
                  <OPTION value="18">18</OPTION>
                  <OPTION value="19">19</OPTION>
                  <OPTION value="20">20</OPTION>
                  <OPTION value="21">21</OPTION>
                  <OPTION value="22">22</OPTION>
                  <OPTION value="23">23</OPTION>
                </SELECT> 時 まで
EOF
	}
	print <<EOF;
              </TD>
            </TR>
            <TR>
              <TD align="center" valign="top">キーワード</TD>
              <TD>
                <INPUT type="text" name="keyword" size="30" maxlength="255"><BR>
                <FONT size="-1">（複数指定の場合は半角スペースで区切ります）</FONT>
              </TD>
            </TR>
            <TR>
              <TD align="center" valign="top">論理式</TD>
              <TD>
                <SELECT name="andor">
                  <OPTION value="and">AND検索（全ての語を含む）</OPTION>
                  <OPTION value="or">OR検索（いずれかの語を含む）</OPTION>
                </SELECT><BR>
                <FONT size="-1">（キーワードを複数指定した場合にのみ有効です）</FONT>
              </TD>
            </TR>
            <TR>
              <TD align="center">検索対象</TD>
              <TD>
                <SELECT name="target">
                  <OPTION value="all">全文</OPTION>
                  <OPTION value="username">投稿者名</OPTION>
                  <OPTION value="title">題名</OPTION>
                </SELECT>
              </TD>
            </TR>
            <TR>
              <TD>オプション</TD>
              <TD>
                <INPUT type="checkbox" name="alpha" value="checked">大文字小文字の区別をしない<BR>
              </TD>
            </TR>
          </TABLE>
        </TD>
      </TR>
    </TABLE>
    <INPUT type="hidden" name="charchk" value="あ">
    <INPUT type="hidden" name="smode" value="on">
    <INPUT type="submit" value="　ログ表\示　">
  </FORM>
  <A href="$cgiurl">掲示板へ</A>
</DIV><BR>

<H4 align="right">Getlog Ver0.3b4.0921<BR>
（くずはすくりぷと組み込みバージョン）</H4>

</BODY>
</HTML>
EOF
}


###############################################################################
#  過去ログ表示
###############################################################################

sub prtoldlog {
	
	my ( @oldlog, @prtbuf, @msgbuf, $l_mon, $l_mday, $l_hour, $l_min, @keyword, 
	  $hit, $hitcount );
	$l_mon = 0;
	$l_mday = 0;
	$l_hour = 0;
	$l_min = 0;
	$hitcount = 0;
	undef @msgbuf;
	
	open ( OLDLOG, "$oldlogfiledir$FORM{'file'}" ) || &prterror ( "$FORM{'file'}を開けませんでした" );
	eval 'flock ( OLDLOG, 1 )';
	seek ( OLDLOG, 0, 0 );
	@oldlog = <OLDLOG>;
	eval 'flock ( OLDLOG, 8 )';
	close ( OLDLOG );
	
	$FORM{'file'} =~ /.*\.(.*)/;
	if ( $1 =~ /htm/ ) {
		
		#旧バージョンの過去ログ
		print @oldlog;
		
	} else {
		
		# 新バージョンの過去ログ
		print "<H1>$FORM{'file'}</H1><HR>";
		$i = 0;
		if ( $FORM{'smode'} ) {
			$hitcount = 0;
			@keyword = split ( /\ /, $FORM{'keyword'} );
			while ( $i < @oldlog ) {
				&getmessage ( $oldlog[$i] );
				if (
				 ( $oldlogsavesw == 0 &&
				 ( ( $FORM{'s1'} < $hour || ( $FORM{'s1'} == $hour && $FORM{'e1'} <= $min ) ) &&
				   ( $FORM{'s2'} > $hour || ( $FORM{'s2'} == $hour && $FORM{'e2'} >= $min ) ) ) ) ||
				 ( $oldlogsavesw == 1 &&
				 ( ( $FORM{'s1'} < $mday || ( $FORM{'s1'} == $mday && $FORM{'e1'} <= $hour ) ) &&
				   ( $FORM{'s2'} > $mday || ( $FORM{'s2'} == $mday && $FORM{'e2'} >= $hour ) ) ) ) ) {
					if ( $FORM{'keyword'} eq '' ) {
						print &prtmessage ( 1, "$oldlogfiledir$FORM{'file'}" );
					} else {
						$j = 0;
						$hit = 0;
						$k = '';
						if ( ( $FORM{'target'} eq 'username' ) || ( $FORM{'target'} eq 'all' ) ) {
							$k .= $user;
						}
						if ( ( $FORM{'target'} eq 'title' ) || ( $FORM{'title'} eq 'all' ) ) {
							$k .= $title;
						}
						if ( $FORM{'target'} eq 'all' ) {
							$k .= $msg;
						}
						if ( $FORM{'andor'} eq 'or' ) {
							while ( $j < @keyword && $hit == 0 ) {
								if ( ( $FORM{'alpha'} && $k =~ /$keyword[$j]/i ) ||
								  ( $k =~ /$keyword[$j]/ ) ) {
									$hit++;
								} else {
									$j++;
								}
							}
						} else {
							while ( $j < @keyword ) {
								if ( ( $FORM{'alpha'} && $k =~ /$keyword[$j]/i ) ||
								  ( $k =~ /$keyword[$j]/ ) ) {
									$hit++;
								}
								$j++;
							}
							if ( $hit != @keyword ) {
								$hit = 0;
							}
						}
						if ( $hit > 0 ) {
							print &prtmessage ( 1, "$oldlogfiledir$FORM{'file'}" );
							$hitcount++;
						}
					}
				}
				$i++;
			} # while
			
			if ( $FORM{'keyword'} ne '' ) {
				if ( $hitcount > 0 ) {
					print "<H3>$hitcount件見つかりました。</H3>";
				} else {
					print "<H3>指定されたキーワードに該当するメッセージは見つかりませんでした。</H3>";
				}
			}
			
		} else {
			while ( $i < @oldlog ) {
				&getmessage ( $oldlog[$i] );
				print &prtmessage ( 1, "$oldlogfiledir$FORM{'file'}" );
				$i++;
			}
		}
		print "\n</BODY>\n</HTML>\n";
	}
}


sub prtoldlog2 {
	
	my ( @oldlog, @prtbuf );
	undef @msgbuf;
	
	open ( OLDLOG, "$oldlogfiledir$FORM{'file'}" ) || &prterror ( "$FORM{'file'}を開けませんでした" );
	eval 'flock ( OLDLOG, 1 )';
	seek ( OLDLOG, 0, 0 );
	@oldlog = <OLDLOG>;
	eval 'flock ( OLDLOG, 8 )';
	close ( OLDLOG );
	
	push ( @prtbuf, "<HR>\n" );
	for ( $i = 0 ; $i < @oldlog ; $i++ ) {
		&getmessage ( $oldlog[$i] );
		$j = &prtmessage ( 1, $postid );
		foreach ( split ( /\n/, $j ) ) {
			push ( @prtbuf, "$_\n" );
		}
	}
	
	print "<H1>$FORM{'file'}</H1>", @prtbuf, "\n</BODY>\n</HTML>\n";
}


###############################################################################
#  Getlog メイン処理
###############################################################################

sub getlog {
	
	print <<EOF;
<HTML>
<HEAD>
<TITLE>$bbstitle 過去ログ</TITLE>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</HEAD>

$body
EOF
	
	if ( $FORM{'file'} ) {
		$FORM{'keyword'} =~ s/\0/\,/g;
		$FORM{'keyword'} =~ s/\x5c/\\x5c/g;
		$FORM{'keyword'} =~ s/\x5b/\\x5b/g;
		$FORM{'keyword'} =~ s/\x5d/\\x5d/g;
		$FORM{'keyword'} =~ s/\x5e/\\x5e/g;
		&prtoldlog;
	} else {
		&oldloglist;
	}
}


1;


__END__
