package Initialize;
use base Bbs;
use strict;
sub attribute
{
my $s = shift;
my %a = @{$_[0]}; # @$_[0];とか書くと正常に動きません
$s->{'from'} = {'bbs'=>undef,'key'=>undef,'time'=>undef,'subject'=>undef,'name'=>undef,'mail'=>undef,'message'=>undef,'date'=>undef,'submit'=>undef,'code'=>undef,'check'=>undef};
$s->{'list'} = {'dat'=>undef,'subject'=>undef,'response'=>undef,'thread'=>undef,};
$s->{'path'} = {'script'=>undef,'bbs'=>undef,'dat'=>undef,'subject'=>undef,'subback'=>undef,'caps'=>undef,'template'=>undef,};
$s->{'file'} = {
'setting' => 'SETTING.TXT', # 板設定
'conf' => 'conf.txt', # 掲示板動作詳細設定
'subject' => 'subject.txt', # アクティブスレッド記録ファイル
'subback' => 'subback.html', # subback
'index' => 'index.html', # index
'index_i' => 'index.html', # i-mode用index
'rss' => 'headline.rss', # rss
'caps' => 'caps.cgi', # キャップ
'response' => 'response.cgi', # レスのホスト一時格納(仮名)
'thread' => 'thread.cgi', # スレッドのホスト一時格納(仮名)
'caution' => 'caution.cgi', # 連続投稿しすぎとかで確認画面に飛ばされたホスト一時格納
'proxy' => 'proxy.cgi', # プロクシ規制リスト(仮名)
'ban' => 'ban.cgi', # 規制ファイル(仮名)
'kisei' => 'kisei.cgi', # 板別規制ファイル(仮名)
'gonta' => undef, # HOST_CHECK有効時の全ホスト記録ファイル ../test/aho/板名とか.cgi
'head' => 'head.html', # 板のトップ表示
'option' => 'option.txt', # サーバ別まとめて表示(クリックで救えるとか)
'putad' => 'putad.txt', # 広告(16メロミックス)
'headad' => 'headad.txt', # 広告(e-Bankなど)
'henkan' => 'henkan.cgi', # 変換する文字列リスト
};
$s->{'template'} = {
'index' => 'index.tmpl', # index.htmlのテンプレート
'index_i' => 'index_i.tmpl', # index.htmlのテンプレート
'make_dat' => 'make_dat.tmpl', # 新規スレ立ての確認画面のテンプレート
'error' => 'error.tmpl', # エラー画面のテンプレート
'caution' => 'caution.tmpl', # 警告画面のテンプレート
'cookie' => 'cookie.tmpl', # cookie確認のテンプレート
'wait' => 'wait.tmpl', # 書き込み完了時のテンプレート
'notice_make_dat' => 'notice_make_dat.tmpl', # スレ立て最終確認画面のテンプレート
'notice_write_dat' => 'notice_write_dat.tmpl', # レス書き最終確認画面のテンプレート
'rss' => 'rss.tmpl', # rssテンプレート
};
$s->{'conf'} = {
'line_break' => '
', # \nを置換する文字列
'date_time_format' => '%Y/%m/%d (%v) %H:%M',
'delimiter' => '<>', # 全ログ共通デリミタ
'notice_line_length' => 230, # 警告を出す一行の長さ
'notice_line_break' => 25, # 警告を出す改行数
'limit_line_length' => 256, # 一行の長さ制限
'limit_line_break' => 32, # 改行数制限
'limit_fromtime' => 1080, # フォームのtimeの制限時間(秒)
'limit_dat_file_size' => 512000, # datの最大ファイルサイズ(byte)
'limit_dat_line' => 1000, # スレッドストッパーをかける行数
'limit_line_number' => 16, # レス省略までの行数 index.tmplで使用
'limit_res_anchor' => 16, # レスアンカー数制限
'cookie_expire' => 86400, # クッキー有効期限(秒)
'cookie_jcode_encode' => undef, # Jcode.pmを使用して作った、URLエンコードのクッキーを食べさせるかどうか 使用しない場合はそのまま何もせず食べさせる。本当はちゃんとやらないといけないんだけど・・・
'limit_thread_name' => undef, # スレッド行数リミットオーバースレスト名前 空白かundefだと行数が入る
'limit_thread_datetime' => 'limit over',
'limit_thread_message' => 'スレッドが保持できる最大レス数に到達しました。
もうこのスレッドに書き込む事は出来ません。新しいスレッドを立ててね。',
'stopper_thread_name' => 'スレッドストッパー(´・ω・`)', # スレスト名前
'stopper_thread_datetime' => '書き込めません', # スレスト投稿日時
'stopper_thread_message' => 'もうこのスレッドに書き込む事は出来ません。新しいスレッドを立ててね。', # スレスト本文
# コメントアウトしてあるやつは無駄なifが多くなって嫌なので今のところ使ってません
# 'check_from' => 'checked', # 送られてきた情報をチェック これを無効にすると後の処理はほぼノーチェックなので非常に危険
# 'check_log_thread' => 'checked', # スレ立てすぎチェック
# 'check_log_response' => 'checked', # 2重カキコチェック
# 'check_log_ban' => 'checked', # 規制ファイルチェック
# 'check_line_length' => 'checked', # 長すぎる行がありますチェック
# 'check_port' => undef, # ポートチェックするかどうか
'check_port_list' => '80,8080,3128,1080,81,8081', # チェックするポート
'check_port_timeout' => 1, # ポートチェックのタイムアウト(秒)
# 'write_log_thread' => 'checked', # 一時的にIPを記録するかどうか checkedにしないと2重カキコとか連投とか検出できません 多分
# 'write_log_response' => 'checked',
# 'write_log_caution' => 'checked',
# 'write_log_ban' => 'checked',
# 'remake_index' => 'checked', # indexを作るかどうか
# 'remake_subback' => 'checked', # subbackを作るかどうか
# 'replace_cap' => 'checked', # capを使う
# 'replace_trip' => 'checked', # トリップを使う
# 'replace_fusianasan' => 'checked', # fusianasanを使う
# 'replace_resanchor' => 'checked', # resanchorを使う
# 'replace_urianchor' => 'checked', # urianchorを使う
# 'replace_tag' => 'checked', # \nを
に置換
# 'replace_unicode' => 'checked', # unicodeは?に置換
# 'replace_char_entity_set' => 'checked', # & < > " などを文字参照に置換
# 'replace_msg_char_entity_set' => 'checked', # 本文の & < > " などを文字参照に置換
# 'replace_ng_word' => 'checked', # NGワードは適当に置換
};
$s->{'setting'} = {
# SETTING.TXTデフォルト設定
'BBS_TITLE' => '掲示板', #掲示板名称
'BBS_SUBTITLE' => '掲示板です', #掲示板副題
'BBS_FIGUREHEAD' => '../images/2ch.gif', #看板画像
'BBS_HEADLINK' => 'http://www.2ch.net/guide/', #看板リンク
'BBS_BACKGROUND' => '../images/ba.gif', #背景画像
'BG_COLOR_INFO' => '#CCFFCC', # 色関係はあんまり使いません テンプレートでHTMLをガリガリ直接書けば済むし・・・
'BG_COLOR_THREAD' => '#EEEEEE',
'TEXT_COLOR_BASE' => '#000000',
'TEXT_COLOR_SUBJECT' => '#FF0000',
'TEXT_COLOR_NAME' => '#228822',
'LINK_COLOR' => '#0000CC',
'ALINK_COLOR' => '#FF0000',
'VLINK_COLOR' => '#AA0088',
'THREAD_MENU' => 50, #スレッド一覧の表示数
'THREAD_NUMBER' => 20, #index.htmlで表示するスレッド数
'CONTENTS_NUMBER' => 10, #スレッドでの最新レス数
'LIMIT_SUBJECT' => 48, #スレッドタイトル文字数制限
'LIMIT_NAME' => 48, #名前文字数制限
'LIMIT_MAIL' => 48, #メール欄文字数制限
'LIMIT_MESSAGE' => 2048, #本文文字数制限
'LIMIT_LINE' => 16, #改行制限&「省略されました全てを・・」の条件
'NANASHI_NAME' => '名無しさん',#名無しさんの名前
'CAP_CHECK' => undef, #キャップもログ取る?
'NAME_CHECK' => undef, #名前強制入力
'PROXY_CHECK' => undef, #串禁止
'RES_CHECK' => undef, #書きこみ確認画面を出す
'HOST_CHECK' => undef, #ホスト全部記録(BBS_SLIP相当)
'UNICODE_CHANGE' => 'checked', #ユニコード置換 checked:置換 pass || undef:やらない
'THREAD_TATESUGI' => 25, #スレ立てチェック数
'THREAD_JUNBAN' => undef, #スペシャルなスレ立て規制 用途不明
'RES_RENZOKU' => 12, #12回分のログを記録して、
'RES_KAKISUGI' => 5, #そのうち5回同じ人が投稿したら確認画面に飛ばす
'PING_ITAZURA' => 12, #確認画面に飛ばされた奴を12回分記録して
'PING_IYADURA' => 5, #そのうち5回同じ人が引っかかったらアク禁に飛ばす
'ASETTYA_DAME' => 3, #強制レス間隔
'ID_DISP' => 'show', #ID表示 [show:任意] [snow:任意逝印] [force:強制] [none || non || undef:表示しない]
};
$s->{'permission'} = { # パーミッション設定は必要かなぁ・・・
'index' => 0666,
'subject' => 0666,
'dat' => 0666,
'response' => 0600, # レスのホスト一時格納(仮名)
'thread' => 0600, # スレッドのホスト一時格納(仮名)
'caution' => 0600, # 注意ホスト一時格納(仮名)
'ban' => 0600, # アク禁ホスト永久格納(仮名)
'stopper' => 0444, # スレスト発動時
};
$s->{'flag'} = {
'print_headerfields' => 0, # content-type: text/htmlとか出力したかどうか
'limit_dat_line' => 0,
'error' => 0, # 0:エラーなし 1:注意 2:致命的なエラー 3:書き込み確認
'make_dat' => 0, # スレ立てかどうか
'write_dat' => 0, # レスかどうか
'caution' => 0, # 注意出すかどうか
'ban' => 0, # アク禁にするかどうか
'gonta' => 0, #
'ua_imode' => 0, # UAがimodeであるかどうか
'cap' => 0, # キャップ持ちかどうか
'trip' => 0, # トリップ使ってるかどうか
'fusianasan' => 0, # fusianasanでリモホ晒してるかどうか
'tag' => 0, # tag置換されたか
'unicode' => 0, # unicode置換されたか
'char_entity_set' => 0, # char_entity_set置換されたか
'resanchor' => 0, # resanchor置換されたか
'urianchor' => 0, # urianchor置換されたか
'ng_word' => 0, # ng_word置換されたか
'replace_tag' => 0, # 関数が実行されたかどうか
'replace_char_entity_set' => 0,
'replace_unicode' => 0,
'replace_cap' => 0,
'replace_trip' => 0,
'replace_fusianasan' => 0,
'replace_resanchor' => 0,
'replace_urianchor' => 0,
'replace_ng_word' => 0,
};
$s->{'counter'} = {
'dat_line' => 0, # スレッドのレス数(改行の数)
'replace_tag' => 0, # 関数が置換した回数
'replace_char_entity_set' => 0,
'replace_unicode' => 0,
'replace_cap' => 0,
'replace_trip' => 0,
'replace_fusianasan' => 0,
'replace_resanchor' => 0,
'replace_urianchor' => 0,
'replace_ng_word' => 0,
};
$s->{'headerfields'} = {
'Content-Type: ' => 'text/html; charset=Shift_JIS',
};
$s->{'cookie'} = {
'NAME'=>undef, 'MAIL'=>undef, 'SPID'=>undef,
};
my ($n,$v);
my @c = split '; ', $ENV{'HTTP_COOKIE'};
($n,$v) = split('=', $_, 2), $s->{'cookie'}->{$n} = $v foreach @c;
$s->{'error_reason'} = {
'title' => undef,
'head' => undef,
'body' => undef,
};
my ($k1,$k2);
while ( $k1 = each %a ) {
$s->{$k1} = $a{$k1}, next unless ref $a{$k1} eq 'HASH';
$s->{$k1}->{$k2} = $a{$k1}->{$k2} while $k2 = each %{$a{$k1}};
}
$s;
}
sub path
{
my $bbs=$_[0]->from('bbs');
return if $bbs =~ /\W/g; # 変な文字の場合何もしないで終了
$_[0]->path( 'script' => '../test/' ) unless $_[0]->path('script');
$_[0]->path( 'bbs' => "../$bbs/" ) unless $_[0]->path('bbs');
$_[0]->path( 'dat' => "../$bbs/dat/" ) unless $_[0]->path('dat');
$_[0]->path( 'html' => "../$bbs/html/" ) unless $_[0]->path('html');
$_[0]->path( 'imode' => "../$bbs/i/" ) unless $_[0]->path('imode');
$_[0]->path( 'subject' => "../$bbs/" ) unless $_[0]->path('subject');
$_[0]->path( 'subback' => "../$bbs/" ) unless $_[0]->path('subback');
$_[0]->path( 'rss' => "../$bbs/" ) unless $_[0]->path('rss');
$_[0]->path( 'caps' => '../' ) unless $_[0]->path('caps');
$_[0]->path( 'proxy' => './' ) unless $_[0]->path('proxy');
$_[0]->path( 'kisei' => "../$bbs/" ) unless $_[0]->path('kisei');
$_[0]->path( 'template' => '../template/default/' ) unless $_[0]->path('template');
$_[0]->path( 'gonta' => ($_[0]->path('script')||'../test/').'aho/' ) unless $_[0]->path('gonta');
$_[0];
}
1;
__END__