#!/usr/bin/perl #管理用 bbs.cgi?c=uf&past=0 $BUILD_VER = '1.24'; $BUILD_DATE = '20030323'; # -------------------------------------------------------------------- # ●基本設定 … 必要最小限の設定項目です # 管理者パスワード (5文字以上の半角英数字): $password = 'schuokai'; # 管理者名とE-Mailアドレス: $admin_name = ''; $admin_mail = ''; # 設置した位置 (http:// から ディレクトリ記号 / まで記入): $url_installed = ''; # 掲示板の呼び出し元となる目次ページ: $url_index = '../'; # URL (相対指定も可) $index_title = 'ホーム'; # タイトル $txt_back = '戻る'; # 呼び出し元へ戻るリンクのテキスト # 掲示板のタイトル: $my_title = '長崎県中小企業団体中央会青年部:掲示板'; # TITLE要素 (タグは使えません) $my_h1_element = '長崎県中小企業団体中央会青年部:掲示板'; # H1要素 (タグが使えます) # -------------------------------------------------------------------- # ●拡張設定 … 予備知識が必要です # 1 ファイルやディレクトリ # 1.1 ファイル $file_thread = 'index.html'; # 記事一覧(スレッド表示) $file_recent = 'index2.html'; # 記事一覧(日付順) $file_cgi = 'bbs.cgi'; # CGIスクリプト … このファイルです $file_css = 'bbs.css'; # 外部スタイルシート $file_art = 'bbs.dat'; # 最近の記事 $dir_pastart = './past/'; # 過去の記事/保存するディレクトリ $pre_pastart = 'sy_'; # 過去の記事/ファイル名の先頭文字 $ext_pastart = '.dat'; # 過去の記事/ファイルの拡張子 $file_errors = 'errors.log'; # エラーログ # 1.2 各種ライブラリ $dir_jcode_pl = './'; # jcode.plのあるディレクトリ $lib_nkf = '/usr/local/bin/nkf'; # 漢字コード変換フィルタ nkf $lib_sendmail = '/usr/sbin/sendmail'; # メール配送ソフト sendmail # 1.3 エラーログ (1:記録する 0:記録しない) $use_errorlog = 1; # 2 運用 # 2.1 開発者向けの各種情報表示 (1:表示する 0:しない) $use_selfmonitor = 0; # 2.2 投稿情報をE-Mailで管理者に通知 (1:する 0:しない) $use_nbm = 0; # 2.3 BBS ID (半角英数字) … 通知メールのSubjectで使われます $bbsid = '中央会広場掲示板'; # 2.4 ファイルロック処理 (2:必ず行う 1:OS自動判別 0:行わない) $flock_type = 1; # 2.5 Cookie $cookie_name = 'chuokaibbs'; # 識別名 (半角英数字) $cookie_life = 30; # 有効期限 [day] # 3 記事の管理 # 3.1 記事の件数 $n_rec_art = 40; # 保管件数 $n_rec_pastart = 80; # 過去記事データの1ファイルあたりの件数 # ※いずれも目標値です。スレッドの構造を保持するため、件数は少し # 増えることがあります。 # 3.2 投稿制限 $max_name = 64; # 名前(Name) 文字数 $max_mail = 40; # E-Mail 文字数 $max_url = 80; # URL 文字数 $max_headline = 128; # 見出し(Headline) 文字数 $max_body = 4000; # 本文(Body) 文字数 $max_bodylines = 100; # 本文(Body) 行数 $max_level = 30; # スレッドの段数 レベル # 3.3 本文などに含まれる余分な空白文字 (1:除去する 0:そのまま) $use_diet = 1; # 3.4 記事削除後の最終記事番号 (1:補正する 0:そのまま) $modify_lastno = 1; # 4 セキュリティ # 4.1 投稿者のホスト名 (1:公開 0:非公開) $public_host = 0; # 4.2 同一IPアドレスからの連続投稿防止機能 $use_ips = 0; # この機能を (1:使用する 0:使用しない) $ips_timer = 60; # 連続投稿とみなす間隔 [sec] $ips_timer2 = 90; # 連続投稿の後のペナルティ [sec] $file_ipsip = 'ips.dat';# IPを一時的に記録するファイル # 4.3 呼び出し元URL (2:厳密に確認する 1:確認する 0:確認しない) $use_checkref = 1; # 4.4 投稿フォーム偽造防止機能 $fos = 1; # この機能を (1:使用する 0:使用しない) $fos_salt = 'ch'; # crypt()関数のサルト係数 # DES方式 → 任意の半角英数字 2 bytes # MD5方式 : '$1$' に変更 # 5 ユーザインタフェース(デザイン) # 5.1 曜日 @wdays = qw/日 月 火 水 木 金 土/; # @wdays = qw/Sun Mon Tue Wed Thu Fri Sat/; # 5.2 本文入力領域の大きさ $body_textarea_cols = 85; $body_textarea_rows = 10; # 5.3 本文中の自動リンクで、URLを先頭から何文字まで表示するか $max_view_u = 90; # 5.4 記事の新着表示期間 [day] $days_newart = 3; # 5.5 自動引用のポリシー (1:引用なし 2:常に引用 3:ユーザが選択) $quotation_policy = 3; # 5.6 入力項目 (0:省略可能 1:入力必須) %input_req = ( 'NAME' => 1 # 名前(Name) ,'MAIL' => 0 # E-Mail ,'URL' => 0 # URL ,'HEAD' => 0 # 見出し(Headline) ,'BODY' => 1 # 本文(Body) ); # 5.7 名前が省略されたとき自動的に付けられる名前 $unknown_name = '名前の記入無し'; # 5.8 全文検索結果の最大表示件数 $max_hit = 20; # 6 書き換え可能なテキスト @B_LA = qw|L selected 記事の一覧へ戻る 最近の記事一覧を表示します|; @B_nf = qw|A selected 新規投稿をする 新しい話題の記事を投稿します|; @B_sf = qw|D selected 全文検索 任意の文字列を探すことができます|; @B_uf = qw|U selected 管理 BBSの管理者のみ使用できる機能です|; @B_re = qw|R 0 この記事への回答をする この記事に返信します|; @B_qr = qw|Q 0 この内容を引用して回答をする この記事の本文を引用して返信します|; $Wnr = '最近の見出し'; $Wps = '過去の見出し'; $Wft = '最近の見出し'; $Wra = '記事表示'; $Wpr = '投稿前確認'; $Wad = '管理機能'; $Wef = '記事編集'; $Wgr = '一括購読'; $Wsr = '検索結果'; # 7 書き換え可能なHTML # 7.1 ページの先頭近くに置かれる文章 $HTML_DESC = <<"END_OF_HTML";
END_OF_HTML # 7.2 ページの末尾近くに置かれる文章 $HTML_EXP = <<"END_OF_HTML";$msg
END if ($use_selfmonitor) { print <<"END";Script Build ID = $BUILD_VER.$BUILD_DATE Server Time = $ltime Referred Package = $package Referred File = $file Referred Line = $line
OSNAME = $^O PERL_VERSION = $] SERVER_SOFTWARE = $ENV{'SERVER_SOFTWARE'} REQUEST_METHOD = $ENV{'REQUEST_METHOD'} CONTENT_LENGTH = $ENV{'CONTENT_LENGTH'} HTTP_REFERER = $ENV{'HTTP_REFERER'}END } $HTML = ''; &selfmonitor; &html_end; print $HTML; exit; } sub http_status($$) { my($code, $msg) = @_; print "Status: $code $msg\n"; } sub httph() { unless ($HTTPH) { $HTTPH = 1; print "Content-type: text/html; charset=euc-jp\n\n"; } } sub passcheck() { &err_exit(1101) if (length($password) < 5); &err_exit(1102) if ($in{'ninsho'} ne $password); } sub result_page($) { my($msg) = @_; &httph; &content_begin; &p($msg); $HTML .= <<"END"; END &content_end; } # メインページ sub main_page() { &content_begin; $HTML .= $HTML_DESC; &cngview(1); if ($VIEW eq 'list') { &list(\@ActDat); } else { &thread(\@ActDat, 0, 0); } &toPastLink; &cngview(0); $HTML .= $HTML_EXP; &admin_credit; &content_end; } # メインページを更新する # 返却 更新したページ sub renew_main_page() { my @updfiles; if ($ipast) { $ipast = 0; &read_data; } $SelfRenew = 1; $VIEW = ''; &main_page; if (&renew($file_thread, \$HTML)) { push(@updfiles, $file_thread); } $VIEW = 'list'; &main_page; if (&renew($file_recent, \$HTML)) { push(@updfiles, $file_recent); } $SelfRenew = 0; $VIEW = ''; return @updfiles; } # HTMLを更新する # 返却 1:更新した 0:更新の必要はない sub renew($$) { my($path, $psNEW) = @_; my $OLD; if (open(HTML, $path)) { flock(HTML, 2) if ($flock_type); read(HTML, $OLD, (-s HTML)); close HTML; } if ($OLD ne $$psNEW) { open(HTML, "+<$path") or &err_exit(1211); flock(HTML, 2) if ($flock_type); truncate(HTML, 0); print HTML $$psNEW; close HTML; return 1; } else { return 0; } } # 記事を読み出す # ($ipastが1以上ならread_pastdata()を呼ぶ) sub read_data() { if ($ipast) { &read_pastdata(\@ActDat, $ipast) or &err_exit(1202); } open(LOG, $file_art) or &err_exit(1203); flock(LOG, 2) if ($flock_type); $_ =
No.$NO | 投稿日時: | $TIME $REP |
投稿者: | $art->[$iNAME]$MAIL$URL |
$body
END if ($public_host && $CTRL ne 'nw') { # $$out .= '< ' . &mask_ipaddr($art->[$iHOST]) . " >
\n"; } if ($ipast == 0 && ($CTRL eq 'gr' || $CTRL eq 'r' || $CTRL eq 'sr')) { $$out .= '[ ' . &_link(1, '', @B_LA[1..3], &_cgi($ipast, $VIEW, 0, 0)); if ($quotation_policy & 1) { $$out .= ' | ' . &_link(1, @B_re[0..3], &_cgi($ipast, 0, 'nf', $art->[$iNO])); } if ($quotation_policy & 2) { $$out .= ' | ' . &_link(1, @B_qr[0..3], &_cgi($ipast, 0, 'qf', $art->[$iNO])); } $$out .= " ]
\n"; } $$out .= <<'END';No. | 見出し | 投稿者 | サイト | サイズ | 投稿日時 |
---|---|---|---|---|---|
$no | $head | $art[$iNAME] | $url | $len | $tm |
事務局 長崎県中小企業団体中央会青年部 |
〒850-0031 長崎県長崎市桜町4番1号(長崎商工会館9階) |
TEL 095-826-3201 FAX 095-821-8056 E-mail:chuokai@nagasaki-chuokai.or.jp |
管理者 : " . &_link(($admin_mail), '', '', $admin_name, 'BBSの管理者にメールを送ることができます', "mailto:$admin_mail") . "
\n"; } } sub copyright() { $HTML .= <<"END"; Script : Sylpheed $BUILD_VER END } # End of Script