#!/usr/local/bin/perl

require 'jcode.pl';

$cgiurl = '/cgi-bin/we_bbs.cgi';
$max_size = 1000;                     #１件の最大文字数
$def = 10;                            #１頁の最大表示件数
$max = '100';                         #最大登録件数
$dat_file = './we_bbs.dat';           #データのファイル名
$mnt_file = './we_mnt.dat';           #メンテナンスデータのファイル名

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime(time + 9*60*60);
($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg) = gmtime(time + 30*24*60*60);


@wday_array = ('日','月','火','水','木','金','土');
$date_now = sprintf("%01d月%01d日(%s)　%02d時%02d分",$mon +1,$mday,$wday_array[$wday],$hour,$min);
$date_num = sprintf("%02d%02d%02d%02d%02d",$mon +1,$mday,$hour,$min,$sec);

read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});

@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {

  ($name, $value) = split(/=/, $pair);
  $value =~ tr/+/ /;
  $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

  &jcode'convert(*value,'sjis');

  if ($value =~ /(.*)\"\,\"(.*)/)
  {
    &error('記入ミス','記録できない文字の並び「","」があります.');
  }

  $value =~ s/<!--(.|\n)*-->//g;

  $value =~ s/</&lt;/g;
  $value =~ s/>/&gt;/g;

  if ($FORM{'action'} eq 'regist')
  {
    if ($value =~ /\r\n/)
    {
      $value =~ s/\r\n/\r/g;
    }
    if ($value =~ /\n/)
    {
      $value =~ s/\n/\r/g;
    }
    $value =~ s/\r/<br>\r/g;
  }

  if ($name eq 'name' || $name eq 'email')
  {
    $value =~ s/\;//g;
    $value =~ s/\://g;
    $value =~ s/\,//g;
  }

  if ($name eq 'target')
  {
    push(@RM,$value);
  }
  else
  {
    $FORM{$name} = $value;
  }
}

if (!open(DB, "$dat_file"))
{
  &error('設定ミス',"$dat_file が設定された場所にありません.");
}
@lines = <DB>;
close(DB);

$password = shift(@lines);
chop($password);

$cookies = $ENV{'HTTP_COOKIE'};

@pairs = split(/;/,$cookies);
foreach $pair (@pairs)
{
  ($name, $value) = split(/=/, $pair);
  $name =~ s/ //g;
  $DUMMY{$name} = $value;
}

@pairs = split(/,/,$DUMMY{$cgiurl});
foreach $pair (@pairs)
{
  ($name, $value) = split(/:/, $pair);
  $COOKIE{$name} = $value;
}

if ($FORM{'action'} eq 'regist')
{
  &regist;
}
else
{
  &html;
}
exit;

sub html
{
  print "Content-type: text/html\n\n";

  print "<html><head><title>みんなの掲示板</title></head>\n";
  print "<center>\n";
  print "<h1>みんなの掲示板</h1>\n";

  print "<table cellspacing=8 bgcolor=ffdfdf><tr><th>投稿された内容は、管理者が確認した後で掲示板に掲載されます。<br>内容が不適当と判断された場合、掲載されませんのでご了承願います。<br>本掲示版に関係のないと思われる内容や、公序良俗に反する内容、<br>誹謗、中傷、宗教、営利に関する内容等は掲載されません。<br>メールアドレスは一般には公開しません。<br>テーマについての議論はこの掲示板の中だけで行っていただきます。</th></tr></table>\n";

  print "<form method=post action=$cgiurl>\n";
  print "<input type=hidden name=action value=regist>\n";

  print "<table><tr><th>投稿者氏名</th><td><input type=text name=name size=20 value=$COOKIE{'name'}></td></tr>\n";
  print "<tr><th>メール</th><td><input type=text name=email size=40 value=$COOKIE{'email'}>";
#  print "　　メールアドレス　<input type=radio name=open value=公開 checked>公開　<input type=radio name=open value=非公開>非公開</td></tr>\n";
  print "　　メールアドレスは公開されません。<input type=hidden name=open value=非公開></td></tr>\n";
  print "<tr><th>題　名</th><td><input type=text name=subject size=60></td></tr>\n";
  print "<tr><th>内　容</th><td><textarea name=value rows=5 cols=70></textarea></td></tr></table>\n";
  print "<br><input type=submit value=　　登　録　　><input type=reset value=　　消　去　　></form><p>";

  @lines = reverse(@lines);

  if ($FORM{'page'} eq '')
  {
    $page = 0;
  }
  else
  {
    $page = $FORM{'page'};
  }

  $last = $page + $def - 1;
  if ($last > $#lines)
  {
    $last = $#lines;
  }

  foreach ($page .. $last)
  {
    if ($lines[$_] =~ /^\"(\d+)\"\,\"(.*)\"\,\"(.*)\"\,\"(.*)\"\,\"(.*)\"\,\"(.*)\"\,\"(.*)\"/)
    {
      $number = $1;
      $date = $2;
      $name = $3;
      $email = $4;
      $subject = $5;
      $value = $6;
      $open = $7;

      print "<hr width=600><table width=600>\n";
      print "<tr bgcolor=bfffff><td>　<font size=+1><b>$subject</b></font></td></tr></table>\n";
      print "<table width=600><tr>";
      if ($email && ($open eq "公開"))
      {
        print "<td align=right><i>by <a href=mailto:$email>$name</a>";
      }
      else
      {
        print "<td align=right><i>by $name";
      }
      print "　　<font size=-1>$date</font>　</i></td></tr></table>";

      print "<table width=550 cellspacing=8 bgcolor=ffffff>\n";
      print "<tr><td>$value</td></tr></table>\n";
    }
  }

  $next = $last + 1;
  $n1 = $page + 1;
  $n2 = $last + 1;

  if ($#lines >= 0 && $last ne $#lines)
  {
    print "<form method=post action=$cgiurl>\n";
    print "<input type=hidden name=page value=$next>";
    print "<td><input type=submit value=　　次　頁　　></td></form>\n";
  }

  print "</table><br><table width=550><tr>";
  print "<td><font size=-1>新着より 現在 $n1 〜 $n2 を掲示 （最大保存数 $max）</font></td>\n";

  print "<td align=right><font size=-1>[ <a href=/index.html>トップページへ</a> ]</font></td></tr></table>";
  print "<h4>Copyright(C) 1999 </h4></center></body></html>";
}

sub regist {

  if ($FORM{'name'} eq '')
  {
    &error('入力ミス','投稿者氏名を記入してください.');
  }
  $FORM{'name'} =~ s/</&lt;/g;
  $FORM{'name'} =~ s/>/&gt;/g;

  if ($FORM{'email'} ne '' && !($FORM{'email'} =~ /(.*)\@(.*)\.(.*)/))
  {
    &error('入力ミス','メールアドレスの形式が間違っています.');
  }
  $FORM{'email'} =~ s/</&lt;/g;
  $FORM{'email'} =~ s/>/&gt;/g;

  if ($FORM{'subject'} eq '' && $FORM{'value'} eq '')
  {
    $COOKIE{'name'} = '';
    $COOKIE{'email'} = '';
    &cookie; 
    print "Set-Cookie: $cgiurl=\n";
    &html;
    exit;
  }

  if ($FORM{'subject'} eq '')
  {
    &error('入力ミス','題名を記入してください.');
  }
  $FORM{'subject'} =~ s/</&lt;/g;
  $FORM{'subject'} =~ s/>/&gt;/g;

  if ($FORM{'value'} eq '')
  {
    &error('入力ミス','内容を記入してください.');
  }
  if ($max_size)
  {
    $value_size = length($FORM{'value'});
    if ($value_size > $max_size)
    {
      &error('入力ミス',"最大記録サイズ$max_sizeを超えています. 現在$value_sizeサイズです.");
    }
  }

  &cookie;
  $cook="name\:$FORM{'name'}\,email\:$FORM{'email'}";
  print "Set-Cookie: $cgiurl=$cook; expires=$date_gmt\n";

  if (!open(DB,">>$mnt_file"))
  {
    &error('設定ミス',"$mnt_file へ書き込みできません. パーミッション等を確認してください.");
  }
  print DB "\"$date_num\"\,\"$date_now\"\,\"$FORM{'name'}\"\,\"$FORM{'email'}\"\,\"$FORM{'subject'}\"\,\"$FORM{'value'}\"\,\"$FORM{'open'}\"\n";
  close(DB);

  &error('受け付けました',"投稿された内容は、管理者が確認した後で掲示板に掲載されます。<br>内容が不適当と判断された場合、掲載されませんのでご了承願います。<br>本掲示版に関係のないと思われる内容や、公序良俗に反する内容、<br>誹謗、中傷、宗教、営利に関する内容等は掲載されません。<br>メールアドレスは一般には公開しません。<br>この掲示板の管理用として記入していただきました。<br>テーマについての議論はこの掲示板の中だけで行っていただきます。");
}

sub cookie
{
  if ($yearg < 10)
  {
    $yearg = "0$yearg";
  }
  if ($secg < 10)
  {
    $secg  = "0$secg";
  }
  if ($ming < 10)
  {
    $ming  = "0$ming";
  }
  if ($hourg < 10)
  {
    $hourg = "0$hourg";
  }
  if ($mdayg < 10)
  {
    $mdayg = "0$mdayg";
  }

  $youbi = ("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday") [$wdayg];
  $month = ("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec") [$mong];

  $date_gmt = "$youbi, $mdayg\-$month\-$yearg $hourg:$ming:$secg GMT";
}

sub error
{
  print "Content-type: text/html\n\n";
  print "<html><head><title>みんなの掲示板</title></head>\n";
  print "<body bgcolor="#ffffdd"><center>\n";
  print "<h1>$_[0]</h1>\n";
  print "<h4>$_[1]</h4>\n";
  print "<h5>前の画面に戻るには、ブラウザの【戻る】ボタンを押して下さい。</h5>\n";
  print "<table width=550>\n";
  print "<td align=right><font size=-1>[ <a href=/index.html>トップページへ</a> ]</font></td></tr></table>";
  print "<h4>Copyright(C) 1999</h4></center></body></html>";
  exit;
}
