#!/usr/bin/perl # Copyright (c) CGIROOM. http://cgiroom.nu #======================================================================# # [Ver 3.15.2 ] ツリー掲示板 # # このプログラムによって起きた事にCGIROOMは責任を負いません。 # 利用契約に同意できない方のご利用は、遠慮下さい。 #======================================================================# # 設定 #◇ ログの最高保存件数 $max = 150; #◇ 1ページ表示ツリー件数 $pmax = 15; #◇ 最新記事表示件数 $newlogmax = 20; #◇ タイトル $title="OB・OG掲示板"; #◇ バック先URL $url="../"; #◇ パスワード $pass="adpass1114"; #======================================================================# # ファイル設定(変更したい人のみ) #◇ jcode.plまでのパス $jcode = './jcode.pl'; #◇ データファイル名 $LOG = "treebbs.dat"; #◇ 過去ログ保存用ファイル(オプション) $BACK="treebbs.bak"; #◇ ロックファイル名 $lock = "lock.txt"; #======================================================================# # 詳細設定 (変更しなくてもCGIは動きます) #◇ 返信フォームに引用文字をあらかじめ表示するなら0を1に $FORM{'hens'}= 0 ; #◇ フォームからURLを消す場合は 0 に $urls = 1 ; #◇ 発言者が発言を削除できないようにするなら 0 に $user = 1 ; #◇ 発言にレスがついてしまったら発言者削除をできないようにするなら 0 に $res_del = 1 ; #◇ 削除した記事(とその記事へのレスすべて)を非表示にするな 1 しないなら 0 $del_next = 1 ; #◇ IPを表示するなら 1 しないなら 0 (REMOTE_HOST > REMOTE_ADDR) $ip_print = 1 ; #◇ 検索該当タイトルの表示件数 $s_p = 50 ; #◇ New!マーク 最近の発言につけるマーク $newf ='New!'; #◇ New!マーク表示時間 $new = 48 ; #◇ lastマーク スレッドの中で一番最後に発言された物につけるマーク $last = '←Last'; #◇ 引用文の色 $m_color="#800000"; #◇ コメントの色(#) $c_color="#BBBBBB"; #◇ BODY $body='
'; #◇ 書きこみフォームのバックカラー $bg='#E0E0E0'; #◇ 発言時注意事項 $msg = <<'MSG'; ◇名前と題名は必ず入力してください。雑談から現役生へのメッセージまで
ご自由にお使いください。
"; $var=""; $treealllist=0; #======================================================================# if($FORM{'log'}){ $w = $FORM{'log'}; &err('予期せぬリクエストです') if $w =~ /\D/; open(LOG)||&err('ファイルをオープンできません'); $dummy =$data_log[8]unless $kako; while( ){ if(/^$w\t/o){ @data_log = split(/\t/); undef $data_log[8] unless $urls == 1; last; } } unless(@data_log){ $mataha = "または、過去ログに移動されたかもしれません" if $html && $FORM{'kako'} eq ""; &err('既に削除されてしまったようです。' . $mataha); } &head; $mail="" if $data_log[5]; $cmsg = $data_log[7]; $ip_print = $ip_print ? "
\n発言元: $data_log[12]" : ""; &link(*cmsg); print<発言者: $mail$data_log[4] No.$data_log[0] $data_log[3]
発言日: $data_log[9] $data_log[6]$ip_print $blockquote $cmsg
▼関連発言"; $i=0; seek(LOG,0,0); while("; if( !$kako && &x(\@log,$data_log[1]) >= $kai_max){ print "){ if(/^(\d+)\t(\d+)\t$data_log[2]\t/o){ $F{$data_log[2]}=$1 unless $F{$data_log[2]}; $list{$1}=$_; push(@{$restree{$2}},$1); last if $1 == $data_log[2]; } } close(LOG);$alllist=1; &treelist(0,"","",$size_cut); if($data_log[3]=~ s/Re\[(\d+)\]:/"Re\[" . ($1 + 1) . "\]:"/e){ }elsif($data_log[3]=~ s/^Re:/Re\[2\]:/){ }else{$data_log[3]="Re:$data_log[3]"} ($cna,$maile,$curl,$pwd)=split(/\t/,&get_cookie); $PW =" " if $user; if($FORM{'hens'} == 1 && $FORM{'nhens'} eq ""){ $data_log[7]=~ s/ PASSWORD
/\r> /g; $hen="> $data_log[7]"; } $formurls=<URL 省略可 URL print"
▼スレッド";
open(LOG)||&err('ファイルをオープンできません');
$news = - $new unless $kako;
while(){
if(/^(\d+)\t(\d+)\t$all\t/o){
$F{$all}=$1 unless $F{$all};
$list{$1}=$_;
push(@{$restree{$2}},$1);
push(@{$arestree{$2}},$1);
last if $1 == $all;
}
}
close(LOG);
$links='#';
@data=split(/\t/,$list{$FORM{'s'}});
$target=$data[1];
@{$arestree{$target}}=($data[0]);
print "
│
└◇$data[0]:$data[3] [$data[4]] $data[6]
";
&treelist($FORM{'s'}||0," ","",5000);
print" \n\n";
&alllists($target);
&last;
exit;
#======================================================================#
}elsif($FORM{'ha'} && $FORM{'kako'} eq ""){
&err('不正エラー') if $FORM{'re'} eq "" || $FORM{'s'} =~ /\D/ || $FORM{'re'} =~ /\D/;
&err('http://から記入してください') if $FORM{'url'} && $FORM{'url'} !~ /^http:\/\//;
&err('パスワードは半角英数字のみでご記入願います') if $FORM{'pw'} =~ /\W/;
&ha("記入不足です") if $FORM{'dai'} eq "" || $FORM{'name'} eq "" || $FORM{'t'} eq "";
&ha("只今混雑しているので30秒ほどお待ちになってください。","1") if &lock == 0;
require $jcode;
$host = $ENV{'REMOTE_HOST'} ? $ENV{'REMOTE_HOST'} : $ENV{'REMOTE_ADDR'};
open(LOG)||&err('ファイルをオープンできません');
@open=$blockquote";
open(LOG)||&err('ファイルをオープンできません');
$tmp = unless $kako;
$i="00";
while(){
last if $i++ >= 20;
@data=split(/\t/);
print"◆";
print"$data[0]:$data[3] [$data[4]] $data[6]
";
}
print" ";
&last;
exit;
#======================================================================#
}elsif($FORM{'seek'}){
$FORM{'s'} =~ s/\D//g;
$FORM{'s'} = 1 if $FORM{'s'} eq "";
&head;
print"$blockquote";
@saikin=("$data[8]" if $data[8]; &link(*datass); print<
CGIROOM',$var; } sub get_cookie{ @cookie=split(/;/,$ENV{'HTTP_COOKIE'}); foreach (@cookie){ ($name,$v) = split(/=/); $name =~ s/ //g; $v =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $v =~ s/&/&/g; $v =~ s/"/"/g; $v =~ s/</g; $v =~ s/>/>/g; $cookie{$name}=$v; } return $cookie{CGIROOMTREE}; } sub err{ open(LOCK,">" . $lock)&&close(LOCK) if $locks; local($err)=@_; print"Content-type: text/html\n\n$body