/[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 - (hide annotations) (download)
Wed Jan 12 04:23:01 2005 UTC (20 years, 3 months ago) by wakaba
Branch: MAIN
CVS Tags: HEAD
New

1 wakaba 1.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