#!/usr/local/bin/perl #上記はperlのパス。サーバー管理者の指示に従う。 use strict; #---------------------# #席替えCGI Ver.0.21用BBSCGI 最終更新2005/7/16 #---------------------# #-----設定-----# require '../jcode.pl'; #jcode.plを呼び出す my $datafile = "bbs.dat"; #BBSデータファイル名 my $listfile = "list.dat"; #生徒リストファイル名 my $password = "master"; #管理用パスワード my $title = "席替え結果BBS"; #BBSタイトル my $cgi = "sekigaebbs.cgi"; #CGIファイル名 my $stylesheet = "style.css"; #スタイルシートファイル my $deletedays = 10; #(日) ここで設定した日数より古いログは削除 my $body = "
"; #BODYタグ my $home = ' Home - 席替え占い '; #HOME等へのリンク(HTMLタグで)。'は使わないこと my $sonotacolor = "white"; #生徒リストファイルで設定された席以外の席の色 my $kiji = 10; #1ページあたりの記事数 my $honnin = "あなた"; #生徒リストファイルで設定された名前のうち、記事を書き込んだ人の名前と置き換える名前 my $lockdir = "lockbbs"; #ロックディレクトリ名 my $method = "post"; #---------設定は以上-------------------------------- my $total = 40; #生徒数 my (%FORM); &decode; &lock_check; &file_lock; &writedata; &kansou; &delete; &enterpass; &view; &adminview; &unlock; exit; #------------------------------------------- sub decode{ my $buffer; if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } my @pairs = split(/&/, $buffer); foreach (@pairs) { my ($vn, $value) = split(/=/, $_); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/&/&/g; $value =~ s/</g; $value =~ s/>/>/g; $value =~ s/\t//g; $value =~ s/\cM//g; $value =~ s/\r\n/\n/g; $value =~ s/\r/\n/g; $value =~ s/\n/
いつまでもこのメッセージが表\示されるようなら、
何らかのアクシデントで、ロックがかかったままの状態になっていると思われます。
管理者に連絡してください。
"); } else {&error(1,"ロックディレクトリを作成できません。
CGIの入っているディレクトリがディレクトリの作成を許可するパーミッションでは
ないのが原因だと思います。ディレクトリのパーミッションを変更してください。");
}
}
$SIG{'TERM'} = $SIG{'PIPE'} = $SIG{'HUP'} = "sigexit";
sub sigexit { rmdir($lockdir); exit(1); }
}
sub writedata{
($FORM{'mode'} eq "write") || return;
($FORM{'name'}) || &error(0,"お名前を入力してください。");
($FORM{'com'}) || &error(0,"感想を入力してください。");
($FORM{'seats'}) || &error(1,"席替え結果が送信されていません。");
my ($username,$host) = &get_username;
$FORM{'com'} = &tagok($FORM{'com'});
my @datas = &open_file($datafile,"席替えBBSログファイル");
my @newdatas;
my $no=0;
foreach (@datas){
my @dat = split(/\t/,$_);
chomp @dat;
($^T-$dat[$#dat] > $deletedays*60*60*24) && next;
push (@newdatas,$_);
$no=$dat[0];
}
$no++;
push (@newdatas,"$no\t$FORM{'name'}\t$FORM{'com'}\t$FORM{'seats'}\t$username\t$host\t$^T\n");
&write_file(\@newdatas,$datafile,"席替えBBSログファイル");
}
sub kansou{
($FORM{'mode'} eq "kansou") || return;
($FORM{'name'}) || &error(0,"お名前を入力してください。");
($FORM{'com'}) || &error(0,"感想を入力してください。");
($FORM{'no'} eq "") && &error(1,"感想をどの記事につけるか、指定されていません。");
my ($username,$host) = &get_username;
$FORM{'com'} = &tagok($FORM{'com'});
my @datas = &open_file($datafile,"席替えBBSログファイル");
my @newdatas;
for(my $i=0;$i<=$#datas;$i++){
chomp $datas[$i];
my @dat = split(/\t/,$datas[$i]);
if ($FORM{'no'}==$dat[0]){
@dat = (@dat,$FORM{'name'},$FORM{'com'},$username,$host,$^T);
$datas[$i] = join("\t",@dat);
}
($^T-$dat[$#dat] > $deletedays*60*60*24) && next;
push (@newdatas,"$datas[$i]\n");
}
&write_file(\@newdatas,$datafile,"席替えBBSログファイル");
}
sub delete{
($FORM{'mode'} eq "del") || return;
($FORM{'pass'} eq $password) || &error(0,"管理用パスワードが違います。");
($FORM{'no'}) || &error(1,"削除する記事の指定がありません。");
my @datas = &open_file($datafile,"席替えBBSログファイル");
my @newdatas;
chomp @datas;
foreach (@datas){
my @dat = split(/\t/,$_);
if ($dat[0]==$FORM{'no'}){
($FORM{"del_0"} eq "on") && next;
chomp @dat;
my @ndat = @dat[0..6];
for (my $j=7;$j<=$#dat;$j+=5){
($FORM{"del_$j"} eq "on") || push(@ndat,@dat[$j..$j+5]);
}
$_ = join("\t",@ndat);
}
push (@newdatas,"$_\n");
}
&write_file(\@newdatas,$datafile,"席替えBBSログファイル");
$FORM{'mode'} = "";
}
sub enterpass{
($FORM{'mode'} eq "admin") || return;
($FORM{'pass'}) && return;
&html_header("管理者用画面");
print <<"_HTML_";
\n"; my @seats = split(/,/,$dat[3]); &zaseki(\@seats,$dat[1]); print " |
".&gettime($dat[6])." |
感想:\n";
for(my $j=7;$j<=$#dat;$j+=5){
my $k = $j+1;
print " \n"; print " |
\n";
}
&nextpage($start,$end,$#datas);
&html_footer;
}
sub adminview{
($FORM{'mode'} eq "admin") || return;
($FORM{'pass'}) || return;
($FORM{'pass'} eq $password) || &error(0,"パスワードが違います。");
my @datas = &open_file($datafile,"席替え結果BBSログファイル");
&html_header("$title(管理者モード)");
print <<"_HTML_";
*$deletedays日より古いログは自動的に削除されます。
_HTML_
my ($start,$end);
$start = $FORM{'start'};($FORM{'start'} eq "") && ($start = $#datas);
$end = $start-$kiji+1; ($end<0) && ($end=0);
for(my $i=$start;$i>=$end;$i--){
chomp $datas[$i];
my @dat = split(/\t/,$datas[$i]);
#my ($no,$name,$com,$seats,$username,$host,$time) = split(/\t/,$datas[$i]);
print "