/[suikacvs]/webroot/sccc/board-t/admin/remake.cgi
Suika

Contents of /webroot/sccc/board-t/admin/remake.cgi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (show annotations) (download)
Wed Jan 12 04:23:01 2005 UTC (20 years, 3 months ago) by wakaba
Branch: MAIN
CVS Tags: HEAD
New

1 #!/usr/local/bin/perl
2
3 require 'jcode.pl';
4
5 ## remake.cgi ver 2.06 (2001/08/22)(16.zip)
6
7 # 使い方
8 # remake.cgi?bbs=bbs 全復帰
9 # remake.cgi?bbs=bbs&key=0 復帰なし(index.html再作成)
10 # remake.cgi?bbs=bbs&key=key keyのスレッドを復帰
11
12
13
14 #==================================================
15 # システム関連(タイムゾーン・シグナル)
16 #==================================================
17
18 #タイムゾーンをセットする
19 {
20 $ENV{'TZ'} = "JST-9";
21 }
22
23 #シグナル対処関数
24 sub SigExit {
25 exit(0);
26 }
27
28 #対応シグナル
29 {
30 $SIG{'PIPE'} = $SIG{'INT'} = $SIG{'HUP'} = $SIG{'QUIT'} = $SIG{'TERM'} = "SigExit";
31 }
32
33
34 #==================================================
35 # 初期情報の取得(POST)
36 #==================================================
37
38 {
39 use vars qw(%FORM);
40 my ($buffer, @pairs, $pair, $name, $value);
41 if($ENV{'REQUEST_METHOD'} eq 'GET'){$buffer = $ENV{'QUERY_STRING'};}
42 if($ENV{'REQUEST_METHOD'} eq 'POST'){read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});}
43 @pairs = split(/&/,$buffer);
44 foreach $pair (@pairs) {
45 ($name, $value) = split(/=/, $pair);
46 $value =~ tr/+/ /;
47 $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('H2',$1)/eg;
48 $value =~ s/</&lt;/g;
49 $value =~ s/>/&gt;/g;
50 $value =~ s/\r\n|\r|\n/<br>/g;
51 $value =~ s/<br>/ <br> /g;
52 $FORM{$name} = $value;
53 }
54 }
55
56
57 #==================================================
58 # エラーレスポンス(BBS情報)
59 #==================================================
60
61 #BBS名がない場合ばいばい
62 #BBS名に不正な文字があった場合もばいばい
63 {
64 unless($FORM{'bbs'}){
65 DispError("ERROR!","BBS名がありません!");
66 }
67 # if($FORM{'bbs'} =~ /(\.|\/)/){
68 # DispError("ERROR!","BBS名が不正です!");
69 # }
70 }
71
72
73 #==================================================
74 # システム関連(ファイル・ディレクトリパス)
75 #==================================================
76
77 #各種PATH生成
78 {
79 use vars qw($WWWPATH);
80 use vars qw($PATH);
81 use vars qw($DATPATH);
82 use vars qw($TEMPPATH);
83 use vars qw($IMODEPATH);
84 $PATH = "../" . $FORM{'bbs'} . "/";
85 $DATPATH = $PATH . "dat/";
86 $TEMPPATH = $PATH . "html/";
87 $IMODEPATH = $PATH . "i/";
88
89 use vars qw($NOWTIME);
90 $NOWTIME = time;
91 }
92
93
94 #==================================================
95 # 初期情報の取得(設定ファイル)
96 #==================================================
97
98 {
99 use vars qw(@SETTING);
100 # 設定ファイルを読む
101 my ($m_pass,$m_key,$m_value);
102 $m_pass = $PATH . "SETTING.TXT";
103 if(-e $m_pass){
104 open(FILE,$m_pass);
105 foreach (<FILE>){
106 chop;
107 ($m_key,$m_value) = split /=/;
108 $SETTING{$m_key} = $m_value;
109 }
110 close(FILE);
111 }else{
112 # 設定ファイルがない(ERROR)
113 DispError("ERROR!","ERROR:ユーザー設定が消失しています!");
114 }
115
116 #欠落情報の補完
117 unless($SETTING{"BBS_THREAD_NUMBER"}){$SETTING{"BBS_THREAD_NUMBER"} = 20;}
118 unless($SETTING{"BBS_CONTENTS_NUMBER"}){$SETTING{"BBS_CONTENTS_NUMBER"} = 10;}
119 unless($SETTING{"BBS_LINE_NUMBER"}){$SETTING{"BBS_LINE_NUMBER"} = 30;}
120 unless($SETTING{"BBS_MAX_MENU_THREAD"}){$SETTING{"BBS_MAX_MENU_THREAD"}=100;}
121 unless($SETTING{"BBS_BG_COLOR"}){$SETTING{"BBS_BG_COLOR"}="#FFFFFF";}
122 unless($SETTING{"BBS_MENU_COLOR"}){$SETTING{"BBS_MENU_COLOR"}="#CCFFCC";}
123 unless($SETTING{"BBS_MAKETHREAD_COLOR"}){$SETTING{"BBS_MAKETHREAD_COLOR"}="#CCFFCC";}
124 unless($SETTING{"BBS_THREAD_COLOR"}){$SETTING{"BBS_THREAD_COLOR"}="#EFEFEF";}
125 unless($SETTING{"BBS_SUBJECT_COLOR"}){$SETTING{"BBS_SUBJECT_COLOR"}="#FF0000";}
126 unless($SETTING{"BBS_TEXT_COLOR"}){$SETTING{"BBS_TEXT_COLOR"}="#000000";}
127 unless($SETTING{"BBS_NAME_COLOR"}){$SETTING{"BBS_NAME_COLOR"}="#008800";}
128 unless($SETTING{"BBS_LINK_COLOR"}){$SETTING{"BBS_LINK_COLOR"}="#0000FF";}
129 unless($SETTING{"BBS_ALINK_COLOR"}){$SETTING{"BBS_ALINK_COLOR"}="#FF0000";}
130 unless($SETTING{"BBS_VLINK_COLOR"}){$SETTING{"BBS_VLINK_COLOR"}="#660099";}
131 unless($SETTING{"BBS_TITLE_COLOR"}){$SETTING{"BBS_TITLE_COLOR"}="#000000";}
132 unless($SETTING{"BBS_SUBJECT_COUNT"}){$SETTING{"BBS_SUBJECT_COUNT"}="64";}
133 unless($SETTING{"BBS_NAME_COUNT"}){$SETTING{"BBS_NAME_COUNT"}="64";}
134 unless($SETTING{"BBS_MAIL_COUNT"}){$SETTING{"BBS_MAIL_COUNT"}="64";}
135 unless($SETTING{"BBS_MESSAGE_COUNT"}){$SETTING{"BBS_MESSAGE_COUNT"}="4096";}
136 }
137
138
139 #==================================================
140 # ファイル操作(サブジェクトファイル読み込み)
141 #==================================================
142
143 #サブジェクトファイルを読み込む
144 {
145 my $subject = $PATH . "subject.txt";
146 use vars qw(@PAGEFILE);
147 use vars qw(%SUBJECT);
148 use vars qw($FILENUM);
149 #サブジェクトファイルを読み込む
150 open(SUBR,"<$subject"); #SUBJECTを開く
151 my @SUBJECTLIST = <SUBR>; #内容を全て読み込む
152 close(SUBR); #閉じる
153
154 #サブジェクト内容をハッシュに格納
155 foreach(@SUBJECTLIST){
156 chomp($_);#改行を取る
157 my ($file, $value) = split(/<>/,$_);
158 unless($file){next;}
159 my $filename = $DATPATH . $file;
160 if(-e $filename){
161 #datが存在する場合のみ最後に追加
162 push(@PAGEFILE,$file);
163 $SUBJECT{$file} = $value;
164 }
165 }
166
167 ### 逝っちゃったログも拾う
168 if($FORM{'key'} eq ''){
169 opendir(DIR, $PATH."dat/");
170 @filelist = readdir(DIR);
171 closedir(DIR);
172 foreach(@filelist){
173 if($_ eq "." || $_ eq ".."){next}
174 if (-e $PATH."dat/$_" && $PAGEFILE{$_} eq "" && $SUBJECT{$_} eq ""){
175 unshift(@PAGEFILE,$_);
176 open(IN,$PATH."dat/$_");
177 @in=<IN>;
178 close(IN);
179 $subject=(split /<>/,$in[0])[4];
180 chomp($subject);$num=@in;
181 $SUBJECT{$_} = "$subject ($num)";
182 }
183 }
184 }
185
186 #サブジェクト数を取得
187 $FILENUM=@PAGEFILE;
188 #パーミッション調整
189 chmod(0666,$subject);
190
191 if ($FORM{'key'} eq "") {
192 foreach (@PAGEFILE) {
193 open(DAT,"$DATPATH$_");
194 my @temp=<DAT>;
195 close(DAT);
196 my $num=@temp;
197 my ($name,$mail,$date,$message,$subject) = split(/<>/,$temp[0]);
198 chomp($subject);#改行を取る
199 $SUBJECT{$_} = "$subject ($num)";
200 }
201 }elsif ($FORM{'key'} ne 0 && -e "$DATPATH$FORM{'key'}.dat") {
202 open(DAT,"$DATPATH$FORM{'key'}.dat");
203 my @temp=<DAT>;
204 close(DAT);
205 my $num=@temp;
206 my ($name,$mail,$date,$message,$subject) = split(/<>/,$temp[0]);
207 chomp($subject);#改行を取る
208
209 my $fl=0;
210 foreach(@PAGEFILE){
211 if($_ eq "$FORM{'key'}.dat"){
212 $fl=1;last;
213 }
214 }
215 if($fl eq 0){
216 unshift(@PAGEFILE,"$FORM{'key'}.dat");$FILENUM++;
217 }
218
219 $SUBJECT{"$FORM{'key'}.dat"} = "$subject ($num)";
220 }
221
222 my ($subtt,$subtm,$datfile,$valued,$subval,$subnum);
223 undef $subtm;
224 undef $subtt;
225 $subject = $PATH . "subject.txt";
226
227
228 #サブジェクトテキストを開く
229 open(SUBW,">$subject");
230 eval{flock(SUBW,2);};
231 #一括書き込み
232 my @temp;
233 undef @temp;
234
235
236 foreach(@PAGEFILE){
237 $temp[@temp]=$_;
238 print SUBW "$_\<>$SUBJECT{$_}\n";
239 }
240
241 @PAGEFILE=@temp;
242
243 eval{flock(SUBW,8);};
244 close(SUBW);
245
246 # i-mode用テキストを開く
247 {
248 unless(-e $IMODEPATH){
249 mkdir($IMODEPATH,0777);
250 }
251 my $imodeindex = $IMODEPATH . "index.html";
252 open(SUBW,">$imodeindex");
253 eval{flock(SUBW,2);};
254 # 一括書き込み
255 print SUBW "<HTML>\n";
256 print SUBW "<HEAD>\n";
257 print SUBW "<TITLE>$SETTING{'BBS_TITLE'}</TITLE>\n";
258 print SUBW "</HEAD>\n";
259 print SUBW "おんぷちゃんねる i-mode <a href=\"../../../../i/\">トップ</a><hr>";
260 print SUBW "$SETTING{'BBS_TITLE'}<hr>";
261
262 my ($count,$key,$end,$subtitle);
263 if($FILENUM<30){$end=$FILENUM;}else{$end=30;}
264 for($count=1;$count<=$end;$count++){
265 @PAGEFILE[$count-1]=~ /(\d*)\.dat/;
266 $key = $1;
267 $subtitle = $SUBJECT{@PAGEFILE[$count-1]};
268 &jcode::z2h_sjis(\$subtitle);
269 print SUBW "$count: <a href=\"../../test/read.cgi/$FORM{'bbs'}/$key/i\">$subtitle</a><br>";
270 }
271 $count=@PAGEFILE;
272 if ($count > 30){
273 print SUBW "<hr><a href=\"../../test/pageview.cgi?bbs=$FORM{'bbs'}&page=2&imode=true\">次</a>\n";
274 }
275 print SUBW "<hr>\n";
276 print SUBW <<EOF;
277 <form action="../test/bbs.cgi" method="POST">
278 <input type=hidden name=bbs value=$FORM{'bbs'}>
279 <input type=hidden name=time value=$NOWTIME>
280 <input type="hidden" name="imode" value="true">
281 タイトル:<input size="10" name="subject" type="text"><br>
282 名前:<input type=text name=FROM size=10><br>
283 mail:<input type=text name=mail size=10><br>
284 コメント<br>
285 <textarea ROWS=2 COLS=18 NAME=MESSAGE></textarea><br>
286 <input type="submit" name="submit" value="新スレ作成"><br>
287 </form>
288 EOF
289 print SUBW "<hr></BODY></HTML>\n";
290 eval{flock(SUBW,8);};
291 close(SUBW);
292 # パーミッション調整
293 chmod(0666,$imodeindex);
294 }
295 # 過去ログメニューをかーくー
296 {
297 my $sub = $PATH . "subback.html";
298 open(HED,">$sub");
299 eval{flock(HED,2);};
300 print HED<<EOF;
301 <html><head><meta http-equiv="Content-Type" content="text/html; charset=x-sjis"><META HTTP-EQUIV="pragma" CONTENT="no-cache"><META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"></head><body>
302 <font size=2><base target="body">
303 EOF
304 my $dat;
305 for(my $count=1;$count<=$FILENUM;$count++){
306 $PAGEFILE[$count-1]=~/(\d+)\.dat/;
307 $dat=$1;
308 print HED "<a href=\"../test/read.cgi/$FORM{'bbs'}/$dat/l50\">$count: $SUBJECT{$PAGEFILE[$count-1]}</a> \n";
309 }
310 print HED "<div align=\"right\"><a href=\"./kako/index.html\"><b>倉庫はこちら</b></a>";
311 print HED "</body></html>";
312 eval{flock(HED,8);};
313 close(HED);
314 }
315 }
316
317
318 #==================================================
319 # ファイル操作(HTML作成用作業ファイル更新)
320 #==================================================
321
322 #HTML用DATを作成
323 {
324 if ($FORM{'key'} eq ""){
325 foreach(@PAGEFILE){
326 my $dat;
327 $dat = $_;
328 $dat =~ s/([^\.]*)\.dat/$1/;
329 MakeWorkFile($dat);
330 }
331 }elsif ($FORM{'key'} ne 0) {
332 MakeWorkFile($FORM{'key'});
333 }
334 #パーミッション調整
335 chmod(0777,$TEMPPATH);
336 }
337
338
339 #==================================================
340 # 本HTML吐き処理
341 #==================================================
342
343 {
344 use vars qw($INDEXFILE);
345 $INDEXFILE = $PATH . "index.html";
346 open(HTM,">$INDEXFILE");
347 eval{flock(HTM,2);};
348 print HTM <<EOF;
349 <HTML>
350 <HEAD>
351 <meta http-equiv=Content-Type content=text/html; charset=x-sjis>
352 <META HTTP-EQUIV="pragma" CONTENT="no-cache">
353 <SCRIPT LANGUAGE="JavaScript">
354 <!--
355 Name = getCookie("NAME");
356 Mail = getCookie("MAIL");
357 function getCookie(key, tmp1, tmp2, xx1, xx2, xx3) {
358 tmp1 = " " + document.cookie + ";";
359 xx1 = xx2 = 0;
360 len = tmp1.length;
361 while (xx1 < len) {
362 xx2 = tmp1.indexOf(";", xx1);
363 tmp2 = tmp1.substring(xx1 + 1, xx2);
364 xx3 = tmp2.indexOf("=");
365 if (tmp2.substring(0, xx3) == key) {
366 return(unescape(tmp2.substring(xx3 + 1, xx2 - xx1 - 1)));
367 }
368 xx1 = xx2 + 1;
369 }
370 return("");
371 }
372 // -->
373 </SCRIPT>
374 <TITLE>$SETTING{'BBS_TITLE'}</TITLE>
375 </HEAD>
376 <BODY TEXT="$SETTING{'BBS_TEXT_COLOR'}" BGCOLOR="$SETTING{'BBS_BG_COLOR'}" link="$SETTING{'BBS_LINK_COLOR'}" alink="$SETTING{'BBS_ALINK_COLOR'}" vlink="$SETTING{'BBS_VLINK_COLOR'}" background="$SETTING{'BBS_BG_PICTURE'}">
377 EOF
378
379 if($SETTING{'BBS_TITLE_PICTURE'}){
380 print HTM "<div align=center>";
381 if($SETTING{'BBS_TITLE_LINK'}){ print HTM "<a href=\"$SETTING{'BBS_TITLE_LINK'}\" border=0>"; }
382 print HTM "<img src=\"$SETTING{'BBS_TITLE_PICTURE'}\" border=0>";
383 if($SETTING{'BBS_TITLE_LINK'}){ print HTM "</a>"; }
384 print HTM "</div>";
385 }else{
386 print HTM "<div align=center>";
387 if($SETTING{'BBS_TITLE_LINK'}){ print HTM "<a href=\"$SETTING{'BBS_TITLE_LINK'}\" border=0>"; }
388 # print HTM "<FONT COLOR=\"$SETTING{'BBS_TITLE_COLOR'}\"><H1>$SETTING{'BBS_TITLE'}</H1></FONT>";
389 if($SETTING{'BBS_TITLE_LINK'}){ print HTM "</a>"; }
390 print HTM "</div>";
391 }
392
393 print HTM "\n";
394 print HTM<<EOF;
395 <table border=1 cellspacing=8 cellpadding=2 width=95% bgcolor="$SETTING{'BBS_MAKETHREAD_COLOR'}" align=center><tr><td align="center">
396 <form method=POST action="../test/bbs.cgi">
397 <TABLE BORDER="0" CELLPADDING="1" WIDTH="100%">
398 <TR><TD nowrap COLSPAN="2">
399 <font size=+1><b>$SETTING{'BBS_TITLE'}</b></font><br>
400 EOF
401 if ($SETTING{'BBS_PROXY_CHECK'} eq "checked") {
402 print HTM " <font color=#FF0000>■PROXY規制中■</font><br>\n";
403 }
404 print HTM " </TD>\n";
405 print HTM " <TD width=10% ALIGN=\"right\">";
406 &HTM("../right.txt",1);
407 print HTM<<EOF;
408 </TD>
409 <TD nowrap width=5% ALIGN="right" VALIGN="top"><a href="#menu">■</a> <a href="#1">▼</a></TD>
410 </TR>
411 <TR><TD COLSPAN="3">
412 EOF
413 &HTM($PATH."head.txt",1);
414
415 print HTM<<EOF;
416 <br><font color=red>この板の1スレッドの制限は最大$SETTING{'BBS_MAX_RES_COUNT'}レス、または最大$SETTING{'BBS_MAX_RES_SIZE'}KBになっています。</font><br>
417 EOF
418
419 print HTM " <br></TD></TR>\n";
420
421 if ($SETTING{'BBS_PASSWORD_CHECK'} ne "checked"){
422 print HTM<<EOF;
423 <TR>
424 <TD nowrap ALIGN="right">タイトル:</TD>
425 <TD COLSPAN="2"><input type="text" name="subject" size="40"> <input type=submit value="新規スレッド作成" name="submit"></TD>
426 </TR><TR>
427 <TD nowrap ALIGN="right">名前:</TD>
428 <TD>
429 <SCRIPT Language="JavaScript">
430 <!--
431 document.write("<INPUT TYPE=text NAME=FROM SIZE=20 VALUE=");
432 document.write(Name, ">");
433 // -->
434 </SCRIPT>
435 <NOSCRIPT>
436 <INPUT TYPE=text NAME=FROM SIZE=20>
437 </NOSCRIPT>
438 </TD>
439 <TD nowrap width=45%>E-mail<font size="1">(省略可)</font>:
440 <SCRIPT Language="JavaScript">
441 <!--
442 document.write("<INPUT TYPE=text NAME=mail SIZE=20 VALUE=");
443 document.write(Mail, ">");
444 // -->
445 </SCRIPT>
446 <NOSCRIPT>
447 <INPUT TYPE=text NAME=mail SIZE=20>
448 </NOSCRIPT>
449 </TD>
450 <TD><br></TD></TR><TR>
451 <TD nowrap ALIGN="right" VALIGN="top">内容:</TD>
452 <TD COLSPAN="2">
453 <textarea rows=5 cols=60 wrap=OFF name=MESSAGE></textarea>
454 <input type=hidden name=bbs value=$FORM{'bbs'}>
455 <input type=hidden name=time value=$NOWTIME>
456 </TD></TR></TABLE>
457 EOF
458 }else{
459 print HTM<<EOF;
460 <TD nowrap COLSPAN="5" ALIGN="center">
461 <input type=submit value="新規スレッド作成画面へ" name="submit">
462 <input type=hidden name=bbs value=$FORM{'bbs'}>
463 <input type=hidden name=time value=$NOWTIME>
464 </TD></TR></TABLE>
465 EOF
466 }
467 &HTM("../bottom.txt",1);
468 print HTM "\n</form>\n";
469 my $lp=int($FILENUM / $SETTING{'BBS_THREAD_NUMBER'});
470 if($FILENUM != $lp * $SETTING{'BBS_THREAD_NUMBER'}){
471 $lp++;
472 }
473 if($lp>1){
474 print HTM "<a href=\"../test/pageview.cgi?page=$lp&bbs=$FORM{'bbs'}\">最後のページ</a>";
475 }
476
477 my $nextpage;
478 if($FILENUM>$SETTING{'BBS_THREAD_NUMBER'}){
479 $nextpage=1;
480 print HTM " <a href=\"../test/pageview.cgi?page=2&bbs=$FORM{'bbs'}\">次のページ</a>";
481 }
482
483 print HTM " <a href=\"subback.html\">スレッド一覧</a>";
484 print HTM " <a href=\"i/index.html\">i-mode</a>";
485 print HTM " <a href=\"http://www.2ch.net/guide/faq.html\">FAQ</a>";
486 print HTM " <a href=\"index.html\">リロード</a>\n";
487 print HTM "<table border=0 width=100%><tr>";
488 print HTM "<td align=\"right\"><a href=\"http://onpumoe.hp.infoseek.co.jp/script/\">GlobalNoteScript</a>";
489 print HTM "</td></tr></table>";
490 print HTM "</td></TR>\n";
491 print HTM "</td></tr><tr><td><font size=2>";
492 &HTM("../bbstable.txt",1);
493 print HTM <<EOF;
494 </font></td></tr></table><br>
495 <a name="menu"></a>
496 <table border=1 cellspacing=8 cellpadding=2 width=95% bgcolor="$SETTING{'BBS_MENU_COLOR'}"align=center>
497 <tr><td><font size=2>
498 EOF
499
500 ### スレッド一覧を吐き出す
501 #スレッド吐き出し用にファイル数を調整
502 if($FILENUM > $SETTING{'BBS_MAX_MENU_THREAD'}){
503 $FILENUM=$SETTING{'BBS_MAX_MENU_THREAD'};
504 }
505 my ($dat, $key, $count);
506 for($count=1;$count<=$FILENUM;$count++){
507 $dat=$key=$PAGEFILE[$count-1];
508 $key=~s/([^\.]*)\.dat/$1/;
509 unless($1){next;}
510
511 if($SETTING{'BBS_THREAD_NUMBER'} >= $count){
512 print HTM "<a href=\"../test/read.cgi/$FORM{'bbs'}/$key/l50\" target=\"body\">$count:</a> <a href=\"#$count\">$SUBJECT{$dat}</a> \n";
513 }else{
514 print HTM "<a href=\"../test/read.cgi/$FORM{'bbs'}/$key/l50\" target=\"body\">$count: $SUBJECT{$dat}</a> \n";
515 }
516 }
517 print HTM "\n";
518 print HTM "<div align=\"right\"><a href=\"./subback.html\"><b>スレッド一覧はこちら</b></a></font>\n";
519 print HTM "</td></tr></table><br>\n";
520
521
522 my $headad = "../headad.txt";
523 if(-e $headad){
524 my @headad;
525 open(IN, "$headad");
526 @headad = <IN>;
527 close(IN);
528 if (@headad){
529 print HTM "<table border=1 cellspacing=8 cellpadding=2 width=95% bgcolor=\"$SETTING{'BBS_MENU_COLOR'}\"align=center><tr><td>\n";
530 foreach(@headad){print HTM;}
531 print HTM "</td></tr></table><br>\n";
532 }
533 }
534 &HTM("../headad2.txt",1);
535
536 ### スレッドを吐き出す
537 #スレッド吐き出し用にファイル数を調整
538 if($FILENUM > $SETTING{'BBS_THREAD_NUMBER'}){
539 $FILENUM=$SETTING{'BBS_THREAD_NUMBER'};
540 }
541 my ($front, $next, $ancnum, $dap, $first, $line);
542 for(my $contnum = 0;$contnum < $FILENUM;$contnum++){
543 $front=$contnum;
544 $next=$contnum+2;
545 if($front==0){$front=$FILENUM;}
546 if($next>$FILENUM){$next=1;}
547 $ancnum=$contnum+1;
548 $dap = $PAGEFILE[$contnum];
549 $dap =~ s/([^\.]*)\.dat/$1/;
550 if (!-e "$TEMPPATH$dap.html") {
551 MakeWorkFile($dap);
552 }
553 print HTM "\n";
554 open(IN, "$TEMPPATH$dap.html");
555 $first=<IN>;
556 $first =~ s/\$ANCOR/$ancnum/g;
557 $first =~ s/\$FRONT/$front/g;
558 $first =~ s/\$NEXT/$next/g;
559 print HTM $first;
560 print HTM while <IN>;
561 close(IN);
562 print HTM <<EOF;
563 <input type=hidden name=time value=$NOWTIME>
564 <b>
565 <a href="../test/read.cgi/$FORM{'bbs'}/$dap/">レスを全部読む</a>
566 <a href="../test/read.cgi/$FORM{'bbs'}/$dap/l50">最新レス50</a>
567 <a href="../test/read.cgi/$FORM{'bbs'}/$dap/-100">レス1-100</a>
568 <a href="#menu">掲示板のトップへ</a> <a href="../$FORM{'bbs'}/./index.html">リロード</a>
569 </b></form></DL></td></tr></table></TD></TR></DL></TABLE><br>
570 EOF
571
572 }
573
574 if ($nextpage){
575 print HTM<<EOF;
576 <table border=1 cellspacing=8 cellpadding=2 width=95% bgcolor="$SETTING{'BBS_MENU_COLOR'}"align=center>
577 <tr><td align=center>
578 <a href="../test/pageview.cgi?page=2&bbs=$FORM{'bbs'}"><font size=5><b>次のページ</b></font></a>
579 </td></tr>
580 </table>
581 EOF
582 }
583
584 print HTM "<table border=0 align=center><tr><td><center>";
585
586 print HTM "<br><br>";
587 &HTM("../bottom_ad.txt",1);
588 print HTM "\n";
589 print HTM "</center></tr></td></table></body></html>";
590 eval{flock(HTM,8);};
591 close(HTM);
592 &location;
593
594 }
595
596 sub HTM {
597 my ($file,$h) = @_;
598 if(-e $file){
599 if($h){select(HTM);}
600 open(IN, "$file");
601 print while <IN>;
602 close(IN);
603 if($h){select(STDOUT);}
604 }
605
606 }
607
608 sub location {
609 $PATH .= "index.html";
610 if ($SETTING{'BBS_LOCATION_CHECK'} eq 'checked') {
611 print "Location: $PATH\n\n";
612 } else {
613 print "Content-Type: text/html; charset=shift_jis\n\n";
614 print <<EOF;
615 <html><head>
616 <title>indexファイル作成中</title>
617 <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
618 <META content=0;URL=$PATH http-equiv=refresh></head>
619 <body bgcolor=#EEEEEE>
620 indexファイル作成中
621 </body></html>
622 EOF
623 }
624 exit;
625 }
626
627 #エラー画面(エラー処理)
628 #DispError(TITLE,TOPIC);
629 sub DispError{
630 my $title=$_[0];
631 my $topic=$_[1];
632 print "Content-type: text/html; charset=shift_jis\n\n";
633 #-----------------------------------------------------------------------
634 print <<EOF;
635 <html>
636 <head>
637 <title>$title</title>
638 <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
639 </head>
640 <body bgcolor="#FFFFFF">
641 <table width="650" border="1" cellspacing="0" cellpadding="10">
642 <tr>
643 <td>
644 <table width="640" border="0" cellspacing="0" cellpadding="0">
645 <tr>
646 <td width="640">
647 <div align="left"><b>$topic</b></div>
648 </td>
649 </tr>
650 </table>
651 </td>
652 </tr>
653 </table>
654 </body>
655 </html>
656 EOF
657 #-----------------------------------------------------------------------
658 exit;
659 }
660
661 #作業用ファイル作成
662 #MakeWorkFile(KEY-NUMBER);
663 sub MakeWorkFile {
664 my $key = $_[0];
665 my $workfile = $TEMPPATH . $key . ".html";
666 my $datafile = $DATPATH . $key . ".dat";
667 my (@messx,@content,@logdat);
668 my ($mailto,$time,$brmax,$topnum,$firstlog,$lognum,$name,$mail,$subject,$message);
669 if(-e $datafile){
670 open(RDAT,"<$datafile");
671 @logdat=<RDAT>; # ログを配列に読み込む
672 close(RDAT);
673 }else{
674 open(SHTM,">$workfile");
675 print SHTM "return";
676 close(SHTM);
677 return;
678 }
679 open(SHTM,">$workfile");# ログテンポラリを開く
680 eval{flock(SHTM,2);};
681
682 # ログのカキコ数を取得
683 $lognum = @logdat;
684 # 1つ目の要素を読み込む
685 $firstlog = $logdat[0];
686 # 改行カット
687 chomp($firstlog);
688
689 # 1つ目の要素を加工する
690 ($name,$mail,$time,$message,$subject) = split /<>/,$firstlog;
691 my $check = '(?:^|[\0-\200\240-\337])(?:[\201-\237\340-\374]{2})*';
692 $message =~ s/($check)(https?|ftp|gopher|telnet|whois|news)\:([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)/$1<a href=\"$2\:$3\" target=\"_blank\">$2\:$3<\/a>/igo;
693
694 # サブジェクトテーブルを吐き出す(ここは必ず1行にまとめること(処理効率))
695 #-----------------------------------------------------------------------
696 print SHTM <<EOF;
697 <TABLE border=1 cellspacing=8 cellpadding=2 width=95% bgcolor="$SETTING{'BBS_THREAD_COLOR'}" align=center><TR><TD><table border=0 width=100%><TR><td nowrap><a name="\$ANCOR"></a><B>[\$ANCOR:$lognum]</B></td><td><B><FONT size=+1 color="$SETTING{'BBS_SUBJECT_COLOR'}">$subject</FONT></B></td><TD nowrap ALIGN="right"><a href ="#menu">■</a><a href="#\$FRONT">▲</a><a href="#\$NEXT">▼</a></td></tr><tr><td colspan=3><DL>
698 EOF
699 #-----------------------------------------------------------------------
700 # 1つ目の要素のメールへのリンクを作成
701
702 # 末尾にsjisの1バイト目があったら削る
703 my $check1 = '(?:^|[\0-\200\240-\337])(?:[\201-\237\340-\374]{2})*';
704 my $check2 = '[\201-\237\340-\374]';
705 $mail =~ s/($check1)$check2$/$1/g;
706 $name =~ s/($check1)$check2$/$1/g;
707
708 if($mail ne ''){
709 $mailto = "<a href=\"mailto:$mail\"><b>$name</b></a>";
710 }else{
711 $mailto = "<font color=$SETTING{'BBS_NAME_COLOR'}><b>$name</b></font>";
712 }
713
714 # 1つ目の要素を吐き出す
715 print SHTM "<dt>1 名前:$mailto 投稿日:$time<dd>$message<br><br><br>\n";
716
717 # ログ数から、表示コンテンツをチェック
718 if(@logdat>$SETTING{'BBS_CONTENTS_NUMBER'}){
719 # ケツの要素を0〜9番までコンテンツに格納
720 @content[0..$SETTING{'BBS_CONTENTS_NUMBER'}-1] = @logdat[@logdat-$SETTING{'BBS_CONTENTS_NUMBER'}..@logdat-1];
721 $topnum=@logdat-($SETTING{'BBS_CONTENTS_NUMBER'}-1);
722 if($topnum eq 992){
723 @content[0..$SETTING{'BBS_CONTENTS_NUMBER'}-1]=@logdat[@logdat-$SETTING{'BBS_CONTENTS_NUMBER'}-1..@logdat-2];
724 $topnum--;
725 }
726 }else{
727 # アタマの要素を1〜10番までコンテンツに格納
728 @content[0..($SETTING{'BBS_CONTENTS_NUMBER'}-1)] = @logdat[1..$SETTING{'BBS_CONTENTS_NUMBER'}];
729 $topnum=2;
730 }
731
732 my @messx;
733 foreach(@content){
734 unless($_){
735 $topnum++;
736 next;
737 }
738 chop;
739 ($name,$mail,$time,$message,$subject) = split /<>/;
740 my $check = '(?:^|[\0-\200\240-\337])(?:[\201-\237\340-\374]{2})*';
741 $message =~ s/($check)(https?|ftp|gopher|telnet|whois|news)\:([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)/$1<a href=\"$2\:$3\" target=\"_blank\">$2\:$3<\/a>/igo;
742
743 # 要素のメールへのリンクを作成
744
745 # 末尾にsjisの1バイト目があったら削る
746 my $check1 = '(?:^|[\0-\200\240-\337])(?:[\201-\237\340-\374]{2})*';
747 my $check2 = '[\201-\237\340-\374]';
748 $mail =~ s/($check1)$check2$/$1/g;
749 $name =~ s/($check1)$check2$/$1/g;
750
751 if($mail ne ''){
752 $mailto = "<a href=\"mailto:$mail\"><b>$name</b></a>";
753 }else{
754 $mailto = "<font color=$SETTING{'BBS_NAME_COLOR'}><b>$name</b></font>";
755 }
756
757 print SHTM "<dt>$topnum 名前:$mailto 投稿日:$time<dd>";
758 $topnum++;
759
760 @messx = split /<br>/,$message;# メッセージを行でカット
761 if(@messx<$SETTING{'BBS_LINE_NUMBER'}){
762 print SHTM "$message <br>";
763 }else{
764 for(@messx[0..$SETTING{'BBS_LINE_NUMBER'}]){
765 print SHTM "$_<br>";
766 }
767 $topnum--;
768 print SHTM "<font color=\"$SETTING{'BBS_NAME_COLOR'}\">(省略されました・・全てを読むには<a href=\"../test/read.cgi/$FORM{'bbs'}/$key/$topnum\" target=\"_blank\">ここ</a>を押してください)</font><br>";
769 $topnum++;
770 }
771 print SHTM "<br>\n";
772 }
773 #-----------------------------------------------------------------------
774 print SHTM <<EOF;
775 <dt><dd><form method=POST action="../test/bbs.cgi">
776 <input type=submit value="書き込む" name="submit">
777 名前:
778 <SCRIPT Language="JavaScript">
779 <!--
780 document.write("<INPUT TYPE=text NAME=FROM SIZE=19 VALUE=");
781 document.write(Name, ">");
782 // -->
783 </SCRIPT>
784 <NOSCRIPT>
785 <INPUT TYPE=text NAME=FROM SIZE=19>
786 </NOSCRIPT>
787 E-mail<font size="1">(省略可)</font>:
788 <SCRIPT Language="JavaScript">
789 <!--
790 document.write("<INPUT TYPE=text NAME=mail SIZE=19 VALUE=");
791 document.write(Mail, ">");
792 // -->
793 </SCRIPT>
794 <NOSCRIPT>
795 <INPUT TYPE=text NAME=mail SIZE=19>
796 </NOSCRIPT>
797 <ul>
798 <textarea rows=5 cols=60 wrap=OFF name=MESSAGE></textarea>
799 </ul>
800 <input type=hidden name=bbs value=$FORM{'bbs'}>
801 <input type=hidden name=key value=$key>
802 EOF
803 #-----------------------------------------------------------------------
804 eval{flock(SHTM,8);};
805 close(SHTM);
806 # パーミッション調整
807 chmod(0666,$workfile);
808 }

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24