#!/usr/bin/perl
#+----------------------------------------+
#|       スレッド表示対応掲示板           |
#| - BULLETIN BOARD Pro - Ver1.0 98/01/31 |
#|              bbpro.cgi                 |
#|      (c)1997-8 Takeshi Iwanami         |
#|        akira67@po.jah.or.jp            |
#|  http://www.jah.or.jp/~akira67/perl/   |
#| ※このスクリプト群はシェアウエアです。 |
#| ※継続使用の場合はレジスト料金をお支払 |
#| いの上ご利用ください。                 |
#| ※サポートページの利用規定を遵守してく |
#| ださい。再配布および転貸等は一切認めな |
#| いものとします。                       |
#+----------------------------------------+
# このスクリプトは、投稿フォームを表示するための
# ものです。
use Pg;
require 'jcode.pl';
require 'bbpro_lib.pl';
require 'bbpro_conf.pl';
require 'tag.pl';
&setver;
&conf;
$ENV{"PGCLIENTENCODING"} = "SJIS";

if ($ENV{REMOTE_HOST} eq $ENV{REMOTE_ADDR} or !$ENV{REMOTE_HOST}) {
    $host = gethostbyaddr(pack('C4',split(/\./,$ENV{REMOTE_ADDR})),2)
             || $ENV{REMOTE_ADDR};
} else {
    $host = $ENV{REMOTE_HOST} || $ENV{REMOTE_ADDR};
}

if ($limit) {
    @domain = split(/ +/, $domain);
    foreach (@domain) {
        if ($host =~ /$_/) {
            &error('あなたのアクセス元のドメインからは投稿できません。');
        }
    }
}

$query_string = $ENV{'QUERY_STRING'};
if ($query_string && $query_string !~ /^\d{4}$/) {
    &error('引数の指定が間違っています。');
}

if (!$query_string) {
    $resmsg = '新規投稿';
} else {

    $db = Pg::connectdb("dbname = bbpro user = postgres");
    $sql = "select * from log where msg_no='$query_string'";
    $dataset = $db->exec($sql);
    if ($msg = $db->errorMessage) { &error($msg,$sql); }
    if (@data = $dataset->fetchrow) {
        foreach (@data) { &jcode'convert(*_, 'sjis'); }
        ($msg_no,$stat,$sled,$g_parent,$parent,$child,$date,$subject,$name,
        $email,$url,$comment,$remote_host,$user_agent,$passwd,$pre,
        $script_name,$comment2,$solved,$email_open,$email_send) = @data;
    } else {
        &error("指定された投稿番号(No.$query_string)のデータがありません。");
    }
    $comment =~ s/!BR!/\n/g;
    $comment = tag::conv($comment,"m");
    @comment = split(/\n/, $comment);
    foreach (@comment) { $_ = '》'.$_; }
    $comment = join("\n", @comment);
    ### 2006-11-12 タグなどをエスケープ
    $comment = html_output_escape($comment);

    $resmsg = <<RESMSG;
<small>[$msg_no]$subject (<font color=#0000cc>$name</font>さん)への返事</small>
RESMSG
    if ($subject =~ /^re: *\D*/i) {
        $subject =~ s/^re: */Re\^2: /i;
    } elsif ($subject =~ /^re\^(\d*): */i) {
        $resno = $1 + 1;
        $subject =~ s/^re\^(\d*): */Re\^$resno: /i;
    } else {
        $subject = 'Re: ' . $subject;
    }
    $resto = "$name さま\n\n";

}

my $script_name_list;
open(R, "script_name.txt") or error("script_name.txtが開けませんでした。: $!");
while (<R>) {
    my($k, $v) = split(/\t/);
    my $selected = $k eq $script_name ? "selected" : "";
    $script_name_list .= qq{<option value="$k" $selected>$v};
}

($pre eq '1') && ($pre_checked = 'CHECKED');
#error(get_cookies("bbpro"));
($name,$email,$passwd,$url,$c_email_open) = get_cookies("bbpro");
$email_open{($c_email_open eq '0' ? 0 : 1)} = "checked";

print <<HTML;
Content-type: text/html; charset=Shift_JIS

<html><head><title>$title</title>
<meta http-equiv="content-type" content="text/html;charset=Shift_JIS">
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body bgcolor=$body2_bg text=$body2_text link=$body2_link
vlink=$body2_vlink alink=$body2_alink>

<form action=bbpro1.cgi method=post>

<table border=0 cellpadding=2 cellspacing=3 bgcolor=#ff9999 width=100%>
<tr><td align=right style="padding: 0px 20px 0px 20px;"><b>Perl Script Laboratory サポート掲示板</b></td></tr>
</table>

<div class=main>

<h2>投稿フォーム</h2>
<font color=red>※</font>印は入力必須です。<p>
<table border=1 cellpadding=3 cellspacing=0>
<tr><th align=left colspan=2>$resmsg</th></tr>
<tr><th nowrap>お名前<sup><font color=red>※</font></sup></th>
<td><input name=name value="$name" size=30 maxlength=30></td></tr>
<tr><th>E-mail</th>
<td><input name=email value="$email" size=40>
[<input type=radio name=email_open value=1 $email_open{1}>公開する　
<input type=radio name=email_open value=0 $email_open{0}>公開しない]<!--br>
<input type=checkbox name=email_send value=1 $email_send{1} disabled>レスがついたときにメールで知らせる (準備中) -->
<br>※「公開しない」を選ぶと、管理人のみにアドレスを伝えることができます。
</td></tr>
<tr><th>URL</th>
<td><input name=url value="$url" size=50></td></tr>
<tr><th>題名<sup><font color=red>※</font></sup></th>
<td><input name=subject value="$subject" size=60><br>
(関連プログラム名：<select name=script_name><option>$script_name_list
<option value=other>その他</select>)
<hr size=1 color=#ff9999>
※題名は内容がわかるような簡潔なものにしてください。<br>
※特定のプログラムについての質問・感想・バグ報告等は、「関連プログラム名」を指定してください。
</td></tr>

<tr><th>本文<sup><font color=red>※</font></sup></th>
<td>
<input type=checkbox name=solved value=1><font color=red>解決!</font>
…問題が解決したらチェックしてください。<br>
<textarea name=comment cols=80 rows=10 wrap=virtual style="font-size:10.5pt">$resto$comment</textarea><p>
<font color=#333333>以下の欄には、管理人にだけ見せたい情報(URLやパスワードなど)などを書き込むことができます。<br>
この欄に書いた内容は管理人以外には表\示されません。</font><br>
<textarea name=comment2 cols=80 rows=5 wrap=virtual style="font-size:10.5pt"></textarea>
<table><tr><td></td></tr></table>
HTML
if ($tag == 1) {
    print <<HTML;
※タグが有効です。
<a href=bbpro_help.cgi?tag target=2><b>使用できるタグの一覧を見る</b></a>
<br><input type=checkbox name=tag value=1>タグを無効にする
(タグそのものを本文に表\現したい場合はチェックを入れてください)
HTML
} else {
    print "※タグは無効です。\n";
}

print <<HTML;
<br>※<u>行頭に半角スペースがある行(ブロック)</u>はpreタグで囲まれます。perlのソ\ースなどを表\示するときには左端に半角スペースを入れるようにすると、半角のインデントなどがそのままの体裁で表\示することができますので、ぜひご利用ください。
<br>※1行の長さが長すぎないように半角70文字くらいごとに改行してください。
<br>※URLおよびメールアドレスは自動的にリンクが張られます。
<!-- br><input type=checkbox name=pre value=1 $pre_checked><b>本文全体を&lt;pre&gt;タグで囲む</b><br -->
HTML

if ($membership) {
    print <<HTML;
</td></tr><tr><td colspan=2><b>パスワード :</b>
<input type=password name=passwd value="$passwd" size=8>
(事前登録が必要です) <b><a href=bbpro_reg.cgi>登録する</a></b>
HTML
} else {
    print <<HTML;
</small></td></tr><tr><td colspan=2><b>削除用パスワード :</b>
<input type=password name=passwd value="$passwd" size=8>
HTML
}

print <<HTML;
</td></tr>
</table>
<table><tr><td></td></tr></table>

<input type=hidden name=remote_host value="$host">
<input type=hidden name=res value="$query_string">
<input type=hidden name=flag value=1>
<input type=submit value=投稿内容を確認する style=background-color:efefef;border:solid;border-width:1px;border-color:#333333;>
<input type=button value=戻　る onclick=history.back() style=background-color:efefef;border:solid;border-width:1px;border-color:#333333;>
</div>
<hr size=1 color=#ff9999>

<div class=copyright>$sfooter</div>
</form>
</body></html>
HTML

exit;
