#!/usr/local/bin/perl
########## 初期設定 ##########
##### ライブラリの呼び出し(jcode.plとcgi-lib.plのパス)
require './library/jcode.pl';
require './library/cgi-lib.pl';
&ReadParse;
##### このファイルのURL(相対URLではなく「http://」から始まるURLで指定)
$thisfile = 'http://www.towanosato.jp/news/news.cgi';
##### ログファイル(diarylog.datのパス)
$logfile = './log.dat';
##### タイトル
$title = '- 永遠の郷 - 更新履歴';
##### 文字色や背景色、壁紙などの設定(普通のBODYタグ)
$body = '
';
##### FORMタグのMETHOD属性
#--------------------------------------------#
# Method not implemented..というエラーが #
# 出る場合は、POSTを GETに書き換えて下さい。 #
#--------------------------------------------#
$method = 'POST';
##### 記録させる記事の最大件数
#----------------------------------------------#
# この数値を越えると古い記事から削除されます。 #
#----------------------------------------------#
$max = 100;
##### 1ページに表示する記事の数
$limit = 20;
##### 管理者のパスワード
#----------------------------------------#
# このパスワードを知っている管理者だけが #
# 記事の投稿や削除ができます。 #
# できるだけ他人に分かりにくいパスワード #
# にして下さい。 #
#----------------------------------------#
$admin = 'towanosato';
########## ↑ 初期設定終了 ↑ ##########
#----------------------------------------------------------#
# ここから下をカスタマイズするには、Perlの知識が必要です。 #
# Perlについて十分な知識のない方は、変更しないで下さい。 #
#----------------------------------------------------------#
##### 漢字コードをsjisに変換、不都合な記号を排除
while (($k,$v) = each %in) {
&jcode'convert(*v,"sjis");
$v =~ s/: /:/g;
if ($k eq 'text') {
$v =~ s/\r?\n/
/g;
}
$in{$k} = $v;
}
##### 時間の取得
($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime;
$mon++;
$year = 1900 + $year;
$mon = sprintf("%.2d",$mon);
$mday = sprintf("%.2d",$mday);
$hour = sprintf("%.2d",$hour);
$sec = sprintf("%.2d",$sec);
$min = sprintf("%.2d",$min);
@week = ('日','月','火','水','木','金','土');
$wday = $week[$wday];
$jikan = "$year.$mon.$mday ";
##### 管理者モード or 投稿 or 確認 or 送信 or 削除 or ログ表示
if ($in{'action'} eq "admin") {
if ($in{'admin'} ne $admin) { &Error('Forbidden','パスワードが違います。
ここから先は、管理者以外の立ち入りを禁じます。'); }
&PrintAdmin;
}
elsif ($in{'action'} eq "new") {
if ($in{'admin'} ne $admin) { &Error('Forbidden','不正なアクセスを拒否します。'); }
&PrintNew;
}
elsif ($in{'action'} eq "check") {
if ($in{'admin'} ne $admin) { &Error('Forbidden','不正なアクセスを拒否します。'); }
&PrintCheck;
}
elsif ($in{'action'} eq "send") {
if ($in{'admin'} ne $admin) { &Error('Forbidden','不正なアクセスを拒否します。'); }
&ReadFile; &WriteFile;
print "Location: $thisfile?\n\n";
}
elsif ($in{'action'} eq "del") {
if ($in{'admin'} ne $admin) { &Error('Forbidden','不正なアクセスを拒否します。'); }
&ReadFile; &PrintDel;
}
elsif ($in{'action'} eq "del2") {
if ($in{'admin'} ne $admin) { &Error('Forbidden','不正なアクセスを拒否します。'); }
&ReadFile; &Delete;
print "Location: $thisfile?\n\n";
}
else {
&ReadFile; &PrintLog;
}
##### ログファイル読み込み
sub ReadFile {
open(LOG,"$logfile");
@diarylogs = ;
close(LOG);
}
##### ログファイル書き込み
sub WriteFile {
if (substr($diarylogs[0],1,2) eq ': ') {
$number = substr($diarylogs[0],0,1);
}
elsif (substr($diarylogs[0],2,2) eq ': ') {
$number = substr($diarylogs[0],0,2);
}
elsif (substr($diarylogs[0],3,2) eq ': ') {
$number = substr($diarylogs[0],0,3);
}
$number++;
$newlog = "$number: $jikan: $in{'text'}: \n";
@diarylogs = ($newlog,@diarylogs);
$count = 0;
foreach $addlog (@diarylogs) {
$count++;
if ($count > $max) { last; }
push (@newlogs,$addlog);
}
open(LOG,">>$logfile");
eval { flock(LOG,2); };
eval { truncate(LOG,0) };
seek(LOG,0,0);
print LOG @newlogs;
eval { flock(LOG,8) };
close(LOG);
}
##### HTML出力
sub PrintLog {
print "Content-type: text/html\n\n";
##### ヘッダ出力
print "\n\n$title\n\n";
print "$body\n";
##### 記事出力
$count = 0;
if (! $in{'next'}) { $in{'next'} = 0; }
foreach ($in{'next'}..$#diarylogs) {
if ($count >= $limit) {
$nextpage = "on";
$in{'next'} = $in{'next'} + $count;
last;
}
$count++;
($out_number,$out_jikan,$out_text) = split(/: /,$diarylogs[$_]);
print "$out_jikan\n";
print "$out_text
\n";
}
##### フッタ出力
if ($nextpage eq "on") {
print "\n";
}
else {
print "\n";
}
#--------------------------------#
# ここは、書き換えないで下さい。 #
#--------------------------------#
print "
\n";
print "\n";
print "| \n";
print "\n";
print " | \n";
print "
\n";
print "
\n";
print "\n\n";
exit;
}
##### メンテナンスモード画面出力
sub PrintAdmin {
print "Content-type: text/html\n\n";
print "\n\n管理者メンテナンスモード\n\n";
print "$body\n";
print "管理者メンテナンスモード
\n";
print "
\n";
print "
\n";
print "\n";
print "\n