#!/usr/local/bin/perl #┌───────────────────────────────── #│ JOYFUL NOTE #│ joyful.cgi - 2006/11/11 #│ Copyright (c) KentWeb #│ webmaster@kent-web.com #└───────────────────────────────── # 外部ファイル取り込み require './init.cgi'; require $jcode; require $cgi_lib; # 処理を定義 &parse_form; &axscheck; if ($mode eq "find") { &find; } elsif ($mode eq "past" && $pastkey) { require $pastlogpl; &past_log; } elsif ($mode eq "album") { require $albumpl; &album; } elsif ($mode eq "howto") { require $howtopl; &howto; } elsif ($mode eq "check") { require $checkpl; ✓ } &bbs_log; #------------------------------------------------- # 記事表示部 #------------------------------------------------- sub bbs_log { # ページ繰越 local($page) = 0; local($resfm); foreach ( keys(%in) ) { if (/^page:(\d+)$/) { $page = $1; } if (/^res:(\d+)$/) { $resfm = $1; last; } } # 返信フォーム押下 if ($resfm) { &res_form; } # ヘッダを出力 &header; # カウンタ処理 if ($counter) { &counter; } # 投稿キー local($str_plain,$str_crypt); if ($regist_key) { require $regkeypl; ($str_plain,$str_crypt) = &pcp_makekey; } # タイトル部 print "
\n"; if ($banner1 ne "") { print "$banner1

\n"; } if ($t_img) { print "\"$title\"\n"; } else { print "$title\n"; } # メニュー部 print "


\n"; print "[トップに戻る]\n"; print "[アルバム]\n"; print "[留意事項]\n"; print "[ワード検索]\n"; print "[過去ログ]\n" if ($pastkey); print "[管理用]\n"; print "
\n"; # 投稿フォーム &bbs_form("normal"); print <
EOM # 記事展開 local($i,$top,@view,%res,%nam,$eml,%sub,%dat,%com,%col,%url,%ext,%imw,%imh); open(IN,"$logfile") || &error("Open Error: $logfile"); $top = ; while () { local($no,$reno,$date,$name,$eml,$sub,$com,$url,$host,$pw,$col,$ext,$w,$h,$chk) = split(/<>/); ++$i if (!$reno); next if ($i < $page + 1); next if ($i > $page + $pglog); # 親記事 if (!$reno) { push(@view,$no); # レス記事 } else { $res{$reno} .= "$no,"; } # 題名の長さ if (length($sub) > $sub_len*2) { $sub = substr($sub,0,$sub_len*2) . "..."; } # e-mailリンク if ($eml) { $name = "$name"; } # URLリンク if ($autolink) { &auto_link($com); } $nam{$no} = $name; $eml{$no} = $eml; $sub{$no} = $sub; $dat{$no} = $date; $com{$no} = $com; $col{$no} = $col; $url{$no} = $url; if ($ext) { if ($ImageCheck && $chk eq '0') { $ext{$no} = $IconSoon; $imw{$no} = $IconSoon_w; $imh{$no} = $IconSoon_h; } else { $ext{$no} = "$no$ext"; $imw{$no} = $w; $imh{$no} = $h; } } } close(IN); # 表示 foreach (@view) { # 親記事 print "

\n"; print "
\n"; print "$sub{$_} "; print "投稿者:$nam{$_} 投稿日:$dat{$_} "; print "No.$_ "; if ($url{$_}) { print "$img_home "; } print "  
\n"; print "
"; # 画像 if ($ext{$_} =~ /\.(jpg|gif|png)$/) { # 画像-左 if ($imgpoint == 1) { print ""; print "\"\""; print "$com{$_}
\n"; # 画像-下 } elsif ($imgpoint == 2) { print "$com{$_}
"; print ""; print "\"\"\n"; } # 画像以外 } elsif ($ext{$_}) { # サイズ local($size) = -s "$imgdir/$ext{$_}"; $size = int ( $size / 1024 + 0.5 ) . 'KB'; print "$com{$_}

"; print "添付:$ext{$_}\n"; print "($size)\n"; # 添付なし } else { print "$com{$_}"; } print "
\n"; # レス記事 if (defined($res{$_})) { print "

\n"; foreach $res ( split(/,/, $res{$_}) ) { print "$sub{$res} - $nam{$res} "; print "$dat{$res} No.$res "; if ($url{$res}) { print "$img_home"; } print "
"; # 画像 if ($ext{$res} =~ /\.(jpg|gif|png)$/) { # 画像-左 if ($imgpoint == 1) { print ""; print "\"\""; print "$com{$res}
\n"; # 画像-下 } elsif ($imgpoint == 2) { print "$com{$res}
"; print ""; print "\"\"\n"; } # 画像以外 } elsif ($ext{$res}) { # サイズ local($size) = -s "$imgdir/$ext{$res}"; $size = int ( $size / 1024 + 0.5 ) . 'KB'; print "$com{$res}

"; print "添付:$ext{$res}\n"; print "($size)\n"; # 添付なし } else { print "$com{$res}"; } print "

"; } print "
\n"; } print "

\n"; } # 繰越ページ local($next) = $page + $pglog; local($back) = $page - $pglog; # 繰越ボタン表示 local($pg_btn); if ($back >= 0) { $pg_btn .= "\n"; } if ($next < $i) { $pg_btn .= "\n"; } if ($pg_btn) { print "

\n"; print $pg_btn; local($x,$y) = (1,0); while ( $i > 0 ) { if ($page == $y) { print "[$x]\n"; } else { print "[$x]\n"; } $x++; $y = $y + $pglog; $i = $i - $pglog; } print "

\n"; } print < 処理 記事No 暗証キー $banner2

- Joyful Note -

EOM print &HtmlBot; exit; } #------------------------------------------------- # 返信フォーム #------------------------------------------------- sub res_form { # ログ展開 local($flg,$top,$resub,%res,%nam,$eml,%sub,%dat,%com,%col,%url); open(IN,"$logfile") || &error("Open Error: $logfile"); $top = ; while () { local($no,$reno,$date,$name,$eml,$sub,$com,$url,$host,$pw,$col,$ext,$w,$h,$chk) = split(/<>/); if ($resfm == $no) { $flg = 1; # タイトル名 if ($sub !~ /^Re\:/) { $resub = "Re: $sub"; } } elsif ($resfm == $reno) { $res{$reno} .= "$no,"; } else { next; } $nam{$no} = $name; $eml{$no} = $eml; $sub{$no} = $sub; $dat{$no} = $date; $com{$no} = $com; $col{$no} = $col; $url{$no} = $url; $ext{$no} = $ext; $chk{$no} = $chk; } close(IN); if (!$flg) { &error("不正な返信要求です"); } # 投稿キー local($str_plain,$str_crypt); if ($regist_key) { require $regkeypl; ($str_plain,$str_crypt) = &pcp_makekey; } # ヘッダを出力 &header; print < 返信フォーム
EOM print "

\n"; print "
\n"; print "$sub{$resfm} "; print "投稿者:$nam{$resfm} 投稿日:$dat{$resfm} "; print "No.$resfm "; if ($url{$resfm}) { print "$img_home"; } print "
\n"; print "
"; print "$com{$resfm}"; if ($ext{$resfm}) { local($size) = -s "$imgdir/$resfm$ext{$resfm}"; $size = int ( $size / 1024 ) . 'KB'; if ($ImageCheck && $chk{$resfm} eq '0') { print "

添付:ComingSoon ($size)\n"; } else { print "

添付:$resfm$ext{$resfm} ($size)\n"; } } print "
"; # レス記事 if (defined($res{$resfm})) { print "
"; foreach $res ( split(/,/, $res{$resfm}) ) { print "$sub{$res} - $nam{$res} "; print "$dat{$res} No.$res "; if ($url{$res}) { print "$img_home"; } print "
$com{$res}

"; } print "
\n"; } print "

\n"; print "\n"; $sub = $resub; &bbs_form("res", "res"); print &HtmlBot; exit; } #------------------------------------------------- # ワード検索処理 #------------------------------------------------- sub find { # ページ数 local($page) = 0; foreach ( keys(%in) ) { if (/^page(\d+)$/) { $page = $1; last; } } &header; print <
  • 検索したいキーワードを入力し、「条件」「表\示」を選択して「検索」ボタンを押して下さい。
  • キーワードは半角スペースで区切って複数指定することができます。
EOM require $searchpl; &search($logfile); print &HtmlBot; exit; } #------------------------------------------------- # カウンタ処理 #------------------------------------------------- sub counter { local($count, $cntup, @count); # 閲覧時のみカウントアップ if ($mode eq '') { $cntup = 1; } else { $cntup = 0; } # カウントファイルを読みこみ open(LOG,"+< $cntfile") || &error("Open Error: $cntfile"); eval "flock(LOG, 2);"; $count = ; # IPチェックとログ破損チェック local($cnt, $ip) = split(/:/, $count); if ($addr eq $ip || $cnt eq "") { $cntup = 0; } # カウントアップ if ($cntup) { $cnt++; seek(LOG, 0, 0); print LOG "$cnt:$addr"; truncate(LOG, tell(LOG)); } close(LOG); # 桁数調整 while(length($cnt) < $mini_fig) { $cnt = '0' . $cnt; } local(@cnts) = split(//, $cnt); # GIFカウンタ表示 if ($counter == 2) { foreach (0 .. $#cnts) { print "\"$cnts[$_]\""; } # テキストカウンタ表示 } else { print "$cnt
\n"; } } #------------------------------------------------- # 自動URLリンク #------------------------------------------------- sub auto_link { $_[0] =~ s/([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%]+)/$1$2<\/a>/g; } #------------------------------------------------- # URLエンコード #------------------------------------------------- sub url_enc { local($_) = @_; s/(\W)/'%' . unpack('H2', $1)/eg; s/\s/+/g; $_; }