1 |
wakaba |
1.1 |
#!/usr/local/bin/perl |
2 |
|
|
|
3 |
|
|
### delete.cgi ver 2.04 (2001/07/10) |
4 |
|
|
|
5 |
|
|
#$baseurl="http://www.onpuch.jp/cgi-bin/onpuch/"; |
6 |
|
|
|
7 |
|
|
$method="GET"; |
8 |
|
|
|
9 |
|
|
##一度に表示する |
10 |
|
|
$thread=50; |
11 |
|
|
$res=100; |
12 |
|
|
|
13 |
|
|
|
14 |
|
|
|
15 |
|
|
|
16 |
|
|
|
17 |
|
|
|
18 |
|
|
|
19 |
|
|
|
20 |
|
|
|
21 |
|
|
#システム情報 |
22 |
|
|
use vars qw($NOWTIME); |
23 |
|
|
$NOWTIME = time; |
24 |
|
|
|
25 |
|
|
#================================================== |
26 |
|
|
# システム関連(タイムゾーン・シグナル) |
27 |
|
|
#================================================== |
28 |
|
|
|
29 |
|
|
#タイムゾーンをセットする |
30 |
|
|
{ |
31 |
|
|
$ENV{'TZ'} = "JST-9"; |
32 |
|
|
} |
33 |
|
|
|
34 |
|
|
#シグナル対処関数 |
35 |
|
|
sub SigExit { |
36 |
|
|
exit(0); |
37 |
|
|
} |
38 |
|
|
|
39 |
|
|
#対応シグナル |
40 |
|
|
{ |
41 |
|
|
$SIG{'PIPE'} = $SIG{'INT'} = $SIG{'HUP'} = $SIG{'QUIT'} = $SIG{'TERM'} = "SigExit"; |
42 |
|
|
} |
43 |
|
|
|
44 |
|
|
#================================================== |
45 |
|
|
# 初期情報の取得(POST) |
46 |
|
|
#================================================== |
47 |
|
|
|
48 |
|
|
my $m_query = undef; |
49 |
|
|
my (@m_elements, $m_element, $m_key, $m_value); |
50 |
|
|
use vars qw(%FORM); |
51 |
|
|
|
52 |
|
|
if($ENV{'REQUEST_METHOD'} eq 'POST'){ |
53 |
|
|
read(STDIN,$query,$ENV{'CONTENT_LENGTH'}); |
54 |
|
|
} |
55 |
|
|
$query.= "&$ENV{'QUERY_STRING'}"; |
56 |
|
|
|
57 |
|
|
my (@elements, $element, $key, $value); |
58 |
|
|
@elements = split /&/, $query; |
59 |
|
|
foreach $element (@elements){ |
60 |
|
|
$element=~tr/+/ /;#+を空白に変換 |
61 |
|
|
($key,$value)=split /=/, $element; |
62 |
|
|
$value =~ s/%([\dA-Fa-f]{2})/pack("C",hex($1))/ge; |
63 |
|
|
$FORM{$key} = $value; |
64 |
|
|
} |
65 |
|
|
|
66 |
|
|
if($FORM{'address'}){ |
67 |
|
|
$FORM{'address'} =~/bbs=([^&]+)/;$FORM{'bbs'} =$1; |
68 |
|
|
$FORM{'address'} =~/key=([^&]+)/;$FORM{'key'} =$1; |
69 |
|
|
} |
70 |
|
|
|
71 |
|
|
#================================================== |
72 |
|
|
# エラーレスポンス(BBS情報) |
73 |
|
|
#================================================== |
74 |
|
|
|
75 |
|
|
#BBS名がない場合ばいばい |
76 |
|
|
#BBS名に不正な文字があった場合もばいばい |
77 |
|
|
{ |
78 |
|
|
unless($FORM{'bbs'}){ |
79 |
|
|
DispError("ERROR!","データがありません!"); |
80 |
|
|
} |
81 |
|
|
if($FORM{'bbs'} =~ /(\.|\/)/){ |
82 |
|
|
DispError("ERROR!","データがありません!"); |
83 |
|
|
} |
84 |
|
|
} |
85 |
|
|
|
86 |
|
|
#================================================== |
87 |
|
|
# 初期情報の取得(設定ファイル) |
88 |
|
|
#================================================== |
89 |
|
|
|
90 |
|
|
#設定ファイルを読む |
91 |
|
|
{ |
92 |
|
|
my $m_pass = "../" . $FORM{'bbs'} . "/" . "SETTING.TXT"; |
93 |
|
|
use vars qw(%SETTING); |
94 |
|
|
if(-e $m_pass){ |
95 |
|
|
open(FILE,$m_pass); |
96 |
|
|
my $m_str=<FILE>; |
97 |
|
|
foreach $m_str (<FILE>){ |
98 |
|
|
chomp($m_str); |
99 |
|
|
$m_str =~ /([^=]*)=([^=]*)/; |
100 |
|
|
my ($m_name,$m_value)=($1,$2); |
101 |
|
|
#my ($m_name, $m_value) = split(/=/, $m_str); |
102 |
|
|
$m_value =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg; |
103 |
|
|
$SETTING{$m_name} = $m_value; |
104 |
|
|
} |
105 |
|
|
close(FILE); |
106 |
|
|
}else{ |
107 |
|
|
#設定ファイルがない(ERROR) |
108 |
|
|
DispError("ERROR!","データがありません!"); |
109 |
|
|
} |
110 |
|
|
} |
111 |
|
|
|
112 |
|
|
#================================================== |
113 |
|
|
# システム関連(ファイル・ディレクトリパス) |
114 |
|
|
#================================================== |
115 |
|
|
|
116 |
|
|
#各種PATH生成 |
117 |
|
|
{ |
118 |
|
|
use vars qw($WWWPATH); |
119 |
|
|
use vars qw($PATH); |
120 |
|
|
use vars qw($DATPATH); |
121 |
|
|
use vars qw($TEMPPATH); |
122 |
|
|
use vars qw($IMODEPATH); |
123 |
|
|
$PATH = "../" . $FORM{'bbs'} . "/"; |
124 |
|
|
$DATPATH = $PATH . "dat/"; |
125 |
|
|
$TEMPPATH = $PATH . "html/"; |
126 |
|
|
$IMODEPATH = $PATH . "i/"; |
127 |
|
|
} |
128 |
|
|
|
129 |
|
|
#================================================== |
130 |
|
|
# ファイル操作(サブジェクトファイル読み込み) |
131 |
|
|
#================================================== |
132 |
|
|
|
133 |
|
|
#サブジェクトファイル更新 |
134 |
|
|
|
135 |
|
|
#サブジェクトファイルを読み込む |
136 |
|
|
{ |
137 |
|
|
my $subject = $PATH . "subject.txt"; |
138 |
|
|
use vars qw(@PAGEFILE); |
139 |
|
|
use vars qw(%SUBJECT); |
140 |
|
|
use vars qw($FILENUM); |
141 |
|
|
#サブジェクトファイルを読み込む |
142 |
|
|
open(SUBR,"<$subject"); #SUBJECTを開く |
143 |
|
|
my @SUBJECTLIST = <SUBR>; #内容を全て読み込む |
144 |
|
|
close(SUBR); #閉じる |
145 |
|
|
#サブジェクト内容をハッシュに格納 |
146 |
|
|
foreach(@SUBJECTLIST){ |
147 |
|
|
chomp($_);#改行を取る |
148 |
|
|
my ($file, $value) = split(/<>/,$_); |
149 |
|
|
my $filename = $DATPATH . $file; |
150 |
|
|
if(-e $filename){ |
151 |
|
|
#datが存在する場合のみ最後に追加 |
152 |
|
|
$file =~ /(\d+)/; |
153 |
|
|
$file=$1; |
154 |
|
|
push(@PAGEFILE,$file); |
155 |
|
|
$SUBJECT{$file} = $value; |
156 |
|
|
} |
157 |
|
|
} |
158 |
|
|
#サブジェクト数を取得 |
159 |
|
|
$FILENUM=@PAGEFILE; |
160 |
|
|
if($FORM{'subject'}){ |
161 |
|
|
$FILENUM++; |
162 |
|
|
} |
163 |
|
|
} |
164 |
|
|
|
165 |
|
|
|
166 |
|
|
unless($FORM{'key'} && !-e "../$FORM{'bbs'}/dat/$FORM{'key'}.dat"){ |
167 |
|
|
|
168 |
|
|
if ($FORM{'mode'} eq "res_del"){&res_del;} |
169 |
|
|
if ($FORM{'mode'} eq "thread_del"){&thread_del;} |
170 |
|
|
if ($FORM{'mode'} eq "thread_move"){&thread_move;} |
171 |
|
|
if ($FORM{'mode'} eq "view"){&view;} |
172 |
|
|
if ($FORM{'mode'} eq "stop"){&stop;} |
173 |
|
|
|
174 |
|
|
} |
175 |
|
|
#================================================== |
176 |
|
|
# |
177 |
|
|
#================================================== |
178 |
|
|
|
179 |
|
|
print "Content-type: text/html; charset=shift_jis\n\n"; |
180 |
|
|
print <<"EOF"; |
181 |
|
|
<HTML> |
182 |
|
|
<HEAD> |
183 |
|
|
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> |
184 |
|
|
<TITLE>$SETTING{'BBS_TITLE'}</TITLE> |
185 |
|
|
</HEAD> |
186 |
|
|
<BODY> |
187 |
|
|
<b>$SETTING{'BBS_TITLE'}</b> <a href="../$FORM{'bbs'}/index.html">戻る</a><br> |
188 |
|
|
<table border="1" cellspacing="0" cellpadding="2"> |
189 |
|
|
<tr><td>スレッドキー</td><td>タイトル</td><td> </td><td> </td><td> </td><td> </td></tr> |
190 |
|
|
EOF |
191 |
|
|
|
192 |
|
|
|
193 |
|
|
$page=$FORM{'page'}||1; |
194 |
|
|
$st=($page-1)*$thread; |
195 |
|
|
$nextfl=1; |
196 |
|
|
print "page:$page\n"; |
197 |
|
|
if($FORM{'page'}=~/(\d+)/){$page=$1;} |
198 |
|
|
|
199 |
|
|
foreach(@PAGEFILE[$st..$st+$thread-1]){ |
200 |
|
|
unless($_){$nextfl=0;last;} |
201 |
|
|
print <<"EOF"; |
202 |
|
|
<tr><td>$_</td><td>$SUBJECT{$_}</td> |
203 |
|
|
<td> |
204 |
|
|
<form action="./delete.cgi" method="$method"> |
205 |
|
|
<input type=submit value="ストップ"> |
206 |
|
|
<input type=hidden name="bbs" value="$FORM{'bbs'}"> |
207 |
|
|
<input type=hidden name="key" value="$_"> |
208 |
|
|
<input type=hidden name="mode" value="stop"> |
209 |
|
|
</td></form> |
210 |
|
|
|
211 |
|
|
<td> |
212 |
|
|
<form action="./delete.cgi" method="$method"> |
213 |
|
|
<input type=submit value="レス表\示"> |
214 |
|
|
<input type=hidden name="bbs" value="$FORM{'bbs'}"> |
215 |
|
|
<input type=hidden name="key" value="$_"> |
216 |
|
|
<input type=hidden name="mode" value="view"> |
217 |
|
|
</td></form> |
218 |
|
|
|
219 |
|
|
<td><form action="./delete.cgi" method="$method"> |
220 |
|
|
<input type=hidden name="bbs" value="$FORM{'bbs'}"> |
221 |
|
|
<input type=hidden name="key" value="$_"> |
222 |
|
|
<input type=hidden name="mode" value="thread_move"> |
223 |
|
|
<input type=hidden name="mode2" value="thread_move"> |
224 |
|
|
<input type=submit value="スレッド移転"></td></form> |
225 |
|
|
|
226 |
|
|
<td><form action="./delete.cgi" method="$method"> |
227 |
|
|
<input type=hidden name="bbs" value="$FORM{'bbs'}"> |
228 |
|
|
<input type=hidden name="key" value="$_"> |
229 |
|
|
<input type=hidden name="mode" value="thread_del"> |
230 |
|
|
<input type=submit value="スレッド削除"></td></form> |
231 |
|
|
|
232 |
|
|
|
233 |
|
|
</tr> |
234 |
|
|
EOF |
235 |
|
|
} |
236 |
|
|
|
237 |
|
|
print "</table>\n"; |
238 |
|
|
|
239 |
|
|
if($nextfl){ |
240 |
|
|
$page++; |
241 |
|
|
print <<"EOF"; |
242 |
|
|
<form action="./delete.cgi" method="$method"> |
243 |
|
|
<input type=hidden name=bbs value="$FORM{'bbs'}"> |
244 |
|
|
<input type=submit name="button" value="次の$threadスレ"> |
245 |
|
|
<input type=hidden name="page" value="$page"> |
246 |
|
|
</td> |
247 |
|
|
</form> |
248 |
|
|
EOF |
249 |
|
|
} |
250 |
|
|
|
251 |
|
|
print <<"EOF"; |
252 |
|
|
</body> |
253 |
|
|
</html> |
254 |
|
|
EOF |
255 |
|
|
|
256 |
|
|
exit; |
257 |
|
|
|
258 |
|
|
|
259 |
|
|
sub view { |
260 |
|
|
my $datafile = $DATPATH . $FORM{'key'} . ".dat"; |
261 |
|
|
open(NUM,"<$datafile"); |
262 |
|
|
my @temp=<NUM>; |
263 |
|
|
close(NUM); |
264 |
|
|
my $num=@temp; |
265 |
|
|
|
266 |
|
|
|
267 |
|
|
my $log = $PATH . "log/" . $FORM{'key'} . ".cgi"; |
268 |
|
|
open(WIP,"<$log"); |
269 |
|
|
my @log=<WIP>; |
270 |
|
|
close(WIP); |
271 |
|
|
|
272 |
|
|
foreach (@log) { |
273 |
|
|
$_ =~ /(\d+)<>(.+)/; |
274 |
|
|
$log{$1} = $2; |
275 |
|
|
} |
276 |
|
|
|
277 |
|
|
|
278 |
|
|
|
279 |
|
|
|
280 |
|
|
($name,$mail,$date,$message,$subject) = split(/<>/,$temp[0]); |
281 |
|
|
chomp($subject); |
282 |
|
|
print "Content-type: text/html; charset=shift_jis\n\n"; |
283 |
|
|
print <<"EOF"; |
284 |
|
|
<HTML> |
285 |
|
|
<HEAD> |
286 |
|
|
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> |
287 |
|
|
<TITLE>$SETTING{'BBS_TITLE'}</TITLE> |
288 |
|
|
</HEAD> |
289 |
|
|
<BODY> |
290 |
|
|
<a href="../$FORM{'bbs'}/index.html">$FORM{'bbs'}</a>:<b><a href="../test/read.cgi?bbs=$FORM{'bbs'}&key=$FORM{'key'}">$subject</a></b> ($FORM{'key'})<br> |
291 |
|
|
|
292 |
|
|
<!--<table border="1" cellspacing="0" cellpadding="2"> |
293 |
|
|
<tr> |
294 |
|
|
</tr> |
295 |
|
|
</table>--> |
296 |
|
|
|
297 |
|
|
<table border="0" cellspacing="0" cellpadding="0"><tr><td> |
298 |
|
|
<form action="./delete.cgi" method="$method"> |
299 |
|
|
<input type=hidden name="bbs" value="$FORM{'bbs'}"> |
300 |
|
|
<input type=hidden name="key" value="$FORM{'key'}"> |
301 |
|
|
<input type=hidden name="mode" value="res_del"> |
302 |
|
|
削除メッセージ(空だと透明):<input type=text name="mes" value="あぼーん"> |
303 |
|
|
<input type=submit value="実行"></td></tr> |
304 |
|
|
</table> |
305 |
|
|
<table border="1" cellspacing="0" cellpadding="2"> |
306 |
|
|
<tr><td> </td><td>番<br>号</td><td>名前</td><td>投稿日</td><td>内容</td><td>ホスト</td></tr> |
307 |
|
|
EOF |
308 |
|
|
|
309 |
|
|
|
310 |
|
|
|
311 |
|
|
|
312 |
|
|
|
313 |
|
|
|
314 |
|
|
|
315 |
|
|
$page=$FORM{'page'}||1; |
316 |
|
|
$st=($page-1)*$res; |
317 |
|
|
$nextfl=1; |
318 |
|
|
print "page:$page\n"; |
319 |
|
|
if($FORM{'page'}=~/(\d+)/){$page=$1;} |
320 |
|
|
|
321 |
|
|
$n+=$st; |
322 |
|
|
foreach(@temp[$st..$st+$res-1]){ |
323 |
|
|
unless($_){$nextfl=0;last;} |
324 |
|
|
($name,$mail,$date,$message,$subject) = split(/<>/,$_); |
325 |
|
|
$date =~ s/ ID:(.+)$//g; |
326 |
|
|
$message =~ s/ <br> //g; |
327 |
|
|
$message=substr($message,0,28); |
328 |
|
|
$message =~ s/</</g; |
329 |
|
|
$message =~ s/>/>/g; |
330 |
|
|
$n++; |
331 |
|
|
($host) = (split /<>/,$log{$n})[1]; |
332 |
|
|
#if($mail) {$name="<a href=\"mailto:$mail\">$name</a>"} |
333 |
|
|
print "<tr><td><input type=\"checkbox\" name=\"$n\" value=\"1\"></td><td align=\"center\">$n</td><td>$name</td><td>$date</td><td>$message </td><td>$host</td></tr>\n"; |
334 |
|
|
} |
335 |
|
|
|
336 |
|
|
|
337 |
|
|
print "</table></form>\n"; |
338 |
|
|
|
339 |
|
|
if($nextfl){ |
340 |
|
|
$page++; |
341 |
|
|
print <<"EOF"; |
342 |
|
|
<td> |
343 |
|
|
<form action="./delete.cgi" method="$method"> |
344 |
|
|
<input type=submit value="次の$resレス"> |
345 |
|
|
<input type=hidden name="bbs" value="$FORM{'bbs'}"> |
346 |
|
|
<input type=hidden name="key" value="$FORM{'key'}"> |
347 |
|
|
<input type=hidden name="mode" value="view"> |
348 |
|
|
<input type=hidden name="page" value="$page"> |
349 |
|
|
</form> |
350 |
|
|
EOF |
351 |
|
|
} |
352 |
|
|
|
353 |
|
|
print <<"EOF"; |
354 |
|
|
|
355 |
|
|
</body> |
356 |
|
|
</html> |
357 |
|
|
EOF |
358 |
|
|
|
359 |
|
|
exit; |
360 |
|
|
|
361 |
|
|
} |
362 |
|
|
|
363 |
|
|
|
364 |
|
|
|
365 |
|
|
|
366 |
|
|
|
367 |
|
|
|
368 |
|
|
|
369 |
|
|
|
370 |
|
|
|
371 |
|
|
|
372 |
|
|
sub res_del { |
373 |
|
|
my $datafile = $DATPATH . $FORM{'key'} . ".dat"; |
374 |
|
|
open(NUM,"<$datafile"); |
375 |
|
|
my @temp=<NUM>; |
376 |
|
|
close(NUM); |
377 |
|
|
my $num=@temp; |
378 |
|
|
($name,$mail,$date,$message,$subject) = split(/<>/,$temp[0]); |
379 |
|
|
|
380 |
|
|
$i=1; |
381 |
|
|
$fl=0; |
382 |
|
|
foreach (@temp){ |
383 |
|
|
($name,$mail,$date,$message,$subject) = split(/<>/,$_); |
384 |
|
|
if($FORM{$i} eq "1"){ |
385 |
|
|
if ($FORM{'mes'} ne ""){ |
386 |
|
|
$line="$FORM{'mes'}<>$FORM{'mes'}<>$FORM{'mes'}<>$FORM{'mes'}<>$FORM{'mes'}\n"; |
387 |
|
|
} |
388 |
|
|
else{$line="";$fl=1;} |
389 |
|
|
if ($i eq "1" && $FORM{'mes'} eq "") {DispError("ERROR!","1は透明あぼーんできません");} |
390 |
|
|
}else{ |
391 |
|
|
if($fl){#透明以下のレスは>>のズレを修正_未実装 |
392 |
|
|
$line=$_; |
393 |
|
|
} |
394 |
|
|
else {$line=$_;} |
395 |
|
|
} |
396 |
|
|
push(@ALOG,$line); |
397 |
|
|
$i++; |
398 |
|
|
} |
399 |
|
|
|
400 |
|
|
open(OUT, "> $datafile"); |
401 |
|
|
eval{flock(OUT,2);}; |
402 |
|
|
foreach (@ALOG){print OUT $_;} |
403 |
|
|
eval{flock(OUT,8);}; |
404 |
|
|
close(OUT); |
405 |
|
|
chmod(0666,"$datafile"); |
406 |
|
|
|
407 |
|
|
&location; |
408 |
|
|
|
409 |
|
|
} |
410 |
|
|
|
411 |
|
|
|
412 |
|
|
|
413 |
|
|
sub thread_del { |
414 |
|
|
my $datafile = $DATPATH . $FORM{'key'} . ".dat"; |
415 |
|
|
my $subject = $PATH . "subject.txt"; |
416 |
|
|
use vars qw(@PAGEFILE); |
417 |
|
|
use vars qw(%SUBJECT); |
418 |
|
|
use vars qw($FILENUM); |
419 |
|
|
|
420 |
|
|
my $key = $FORM{'key'}; |
421 |
|
|
$delfile = $DATPATH . $key . ".dat"; |
422 |
|
|
unlink($delfile); |
423 |
|
|
$delfile = $TEMPPATH . $key . ".html"; |
424 |
|
|
unlink($delfile); |
425 |
|
|
|
426 |
|
|
open(SUBR,"<$subject"); #SUBJECTを開く |
427 |
|
|
my @SUBJECTLIST = <SUBR>; #内容を全て読み込む |
428 |
|
|
close(SUBR); #閉じる |
429 |
|
|
#サブジェクト内容をハッシュに格納 |
430 |
|
|
foreach(@SUBJECTLIST){ |
431 |
|
|
chomp($_);#改行を取る |
432 |
|
|
my ($file, $value) = split(/<>/,$_); |
433 |
|
|
my $filename = $DATPATH . $file; |
434 |
|
|
if(-e $filename){ |
435 |
|
|
#datが存在する場合のみ最後に追加 |
436 |
|
|
push(@PAGEFILE,$file); |
437 |
|
|
$SUBJECT{$file} = $value; |
438 |
|
|
} |
439 |
|
|
} |
440 |
|
|
$FILENUM=@PAGEFILE; |
441 |
|
|
my $keyfile = $FORM{'key'} . ".dat"; |
442 |
|
|
my $line = $SUBJECT{$keyfile}; |
443 |
|
|
$line =~ /(.+)\<(\d+)\>$/; |
444 |
|
|
|
445 |
|
|
|
446 |
|
|
open(SUBW,">$subject"); |
447 |
|
|
eval{flock(SUBW,2);}; |
448 |
|
|
foreach (@PAGEFILE) { |
449 |
|
|
if ($_ ne $keyfile) { |
450 |
|
|
print SUBW "$_<>$SUBJECT{$_}\n"; |
451 |
|
|
} |
452 |
|
|
} |
453 |
|
|
eval{flock(SUBW,8);}; |
454 |
|
|
close(SUBW); |
455 |
|
|
chmod(0666,"$subject"); |
456 |
|
|
|
457 |
|
|
&location; |
458 |
|
|
} |
459 |
|
|
|
460 |
|
|
sub thread_move { |
461 |
|
|
my $datafile = $DATPATH . $FORM{'key'} . ".dat"; |
462 |
|
|
|
463 |
|
|
print "Content-type: text/html; charset=shift_jis\n\n"; |
464 |
|
|
print <<"EOF"; |
465 |
|
|
<html> |
466 |
|
|
<head> |
467 |
|
|
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> |
468 |
|
|
<title>スレッド移転</title> |
469 |
|
|
</head> |
470 |
|
|
<body> |
471 |
|
|
|
472 |
|
|
EOF |
473 |
|
|
|
474 |
|
|
if($FORM{'mode2'} eq 'thread_move'){ |
475 |
|
|
open(IN,"$datafile");@log=<IN>;close(IN); |
476 |
|
|
$subject=(split /<>/,$log[0])[4];chomp($subject); |
477 |
|
|
print <<"EOF"; |
478 |
|
|
<form action="./delete.cgi" method="$method"><input type=submit value="戻る"><input type=hidden name="mode" value="view"> |
479 |
|
|
<input type=hidden name="bbs" value="$FORM{'bbs'}"><input type=hidden name="key" value="$FORM{'key'}"></form> |
480 |
|
|
次のスレッドを移転します。 |
481 |
|
|
<a href="../$FORM{'bbs'}/index.html">$FORM{'bbs'}</a>:<b><a href="../test/read.cgi?bbs=$FORM{'bbs'}&key=$FORM{'key'}">$subject</a></b> ($FORM{'key'})<br> |
482 |
|
|
|
483 |
|
|
<form action="./delete.cgi" method=post> |
484 |
|
|
|
485 |
|
|
移動先:<select name="m_to"> |
486 |
|
|
<OPTION value=\"kakolog\">倉庫@$SETTING{'BBS_TITLE'}\n |
487 |
|
|
|
488 |
|
|
EOF |
489 |
|
|
open(IN,"./board.txt");@board=<IN>;close(IN); |
490 |
|
|
foreach(@board){ |
491 |
|
|
chomp($_); |
492 |
|
|
($path,$name,$st)=split /<>/; |
493 |
|
|
if($FORM{'bbs'} eq $path){next;} |
494 |
|
|
|
495 |
|
|
print " <OPTION value=\"$path\">$name\n"; |
496 |
|
|
} |
497 |
|
|
|
498 |
|
|
|
499 |
|
|
print <<"EOF"; |
500 |
|
|
<input type=submit value="移動"> |
501 |
|
|
<input type=hidden name="bbs" value="$FORM{'bbs'}"> |
502 |
|
|
<input type=hidden name="key" value="$FORM{'key'}"> |
503 |
|
|
<br><input type=checkbox name="log" value="checked">跡なし |
504 |
|
|
<input type=hidden name="mode" value="thread_move"> |
505 |
|
|
<input type=hidden name="mode2" value="thread_move2"> |
506 |
|
|
</form> |
507 |
|
|
|
508 |
|
|
EOF |
509 |
|
|
}elsif($FORM{'mode2'} eq 'thread_move2'){ |
510 |
|
|
$datn = substr($FORM{'key'},0,3); |
511 |
|
|
$kako=0;$m_to=$FORM{'m_to'}; |
512 |
|
|
if($FORM{'m_to'} eq 'kakolog'){ |
513 |
|
|
$FORM{'log'}=1; |
514 |
|
|
$FORM{'m_to'}="$FORM{'bbs'}/kako/$datn"; |
515 |
|
|
$kako=1; |
516 |
|
|
}else{ |
517 |
|
|
$FORM{'m_to'}="$FORM{'m_to'}/dat"; |
518 |
|
|
} |
519 |
|
|
|
520 |
|
|
$fr = "../$FORM{'bbs'}/dat/$FORM{'key'}.dat"; |
521 |
|
|
$to = "../$FORM{'m_to'}/$FORM{'key'}.dat"; |
522 |
|
|
|
523 |
|
|
$frh = "../$FORM{'bbs'}/html/$FORM{'key'}.html"; |
524 |
|
|
if($kako){$toh = "/dev/nul"}else{$toh="../$m_to/html/$FORM{'key'}.html";} |
525 |
|
|
|
526 |
|
|
print <<"EOF"; |
527 |
|
|
<form action="./delete.cgi" method="$method"><input type=submit value="戻る"> |
528 |
|
|
<input type=hidden name="mode" value="thread_move"> |
529 |
|
|
<input type=hidden name="mode2" value="thread_move"> |
530 |
|
|
<input type=hidden name="bbs" value="$FORM{'bbs'}"><input type=hidden name="key" value="$FORM{'key'}"></form> |
531 |
|
|
EOF |
532 |
|
|
if($FORM{'log'}){print "跡なし";}else{print "跡あり";} |
533 |
|
|
|
534 |
|
|
## 跡なしの場合移転元のsubject.txtから元スレを抜く |
535 |
|
|
if($FORM{'log'}){ |
536 |
|
|
open(FILE,"../$FORM{'bbs'}/subject.txt"); |
537 |
|
|
@subject =<FILE>; |
538 |
|
|
close(FILE); |
539 |
|
|
|
540 |
|
|
open(FILE,">../$FORM{'bbs'}/subject.txt"); |
541 |
|
|
eval{flock(FILE,2)}; |
542 |
|
|
foreach(@subject){ |
543 |
|
|
chomp($_); |
544 |
|
|
($dat,$sub)=split /<>/; |
545 |
|
|
if($dat ne "$FORM{'key'}.dat"){ |
546 |
|
|
print FILE "$_\n"; |
547 |
|
|
} |
548 |
|
|
} |
549 |
|
|
eval{flock(FILE,8)}; |
550 |
|
|
close(FILE); |
551 |
|
|
chmod(0666,"../$FORM{'bbs'}/subject.txt"); |
552 |
|
|
|
553 |
|
|
undef @subject; |
554 |
|
|
} |
555 |
|
|
|
556 |
|
|
## 過去ログ行きの場合ディレクトリ作成 |
557 |
|
|
if($kako){ |
558 |
|
|
if(!-d "../$m_to/kako/"){ |
559 |
|
|
mkdir("../$FORM{'bbs'}/kako/",0777); |
560 |
|
|
chmod (0777,"../$FORM{'bbs'}/kako/"); |
561 |
|
|
} |
562 |
|
|
if(!-d "../$m_to/kako/$datn/"){ |
563 |
|
|
mkdir ("../$FORM{'bbs'}/kako/$datn/",0777); |
564 |
|
|
chmod (0777,"../$FORM{'bbs'}/kako/$datn/"); |
565 |
|
|
} |
566 |
|
|
} |
567 |
|
|
|
568 |
|
|
|
569 |
|
|
## 移転先にファイル移動 |
570 |
|
|
rename($fr,$to); |
571 |
|
|
rename($frh,$toh); |
572 |
|
|
|
573 |
|
|
if(!$FORM{'log'}){ |
574 |
|
|
open(FILE,">$fr"); |
575 |
|
|
eval{flock(FILE,2)}; |
576 |
|
|
print FILE "移転したよ<>移転したよ<>移転したよ<>移転しました<br>こちらです。$baseurl$m_to/index.html<>移転しました\n"; |
577 |
|
|
eval{flock(FILE,8)}; |
578 |
|
|
close(FILE); |
579 |
|
|
chmod(0666,"$fr"); |
580 |
|
|
|
581 |
|
|
} |
582 |
|
|
## 移転先のsubject.txt書き換え |
583 |
|
|
|
584 |
|
|
open(FILE,"$to");@log =<FILE>;close(FILE); |
585 |
|
|
$subject=(split /<>/,$log[0])[4];$line=@log;chomp($subject); |
586 |
|
|
|
587 |
|
|
open(FILE,"../$m_to/subject.txt"); |
588 |
|
|
@subject =<FILE>; |
589 |
|
|
close(FILE); |
590 |
|
|
$subl="$FORM{'key'}.dat<>$subject ($line)\n"; |
591 |
|
|
unshift(@subject,$subl); |
592 |
|
|
|
593 |
|
|
open(FILE,">../$m_to/subject.txt"); |
594 |
|
|
eval{flock(FILE,2)}; |
595 |
|
|
foreach(@subject){ |
596 |
|
|
chomp($_); |
597 |
|
|
print FILE "$_\n"; |
598 |
|
|
} |
599 |
|
|
eval{flock(FILE,8)}; |
600 |
|
|
close(FILE); |
601 |
|
|
chmod(0666,"../$m_to/subject.txt"); |
602 |
|
|
|
603 |
|
|
|
604 |
|
|
print " <br>\n"; |
605 |
|
|
print " <br>\n"; |
606 |
|
|
$url="remake.cgi?bbs=$FORM{'bbs'}&dat=$FORM{'key'}"; |
607 |
|
|
if($kako){$url.="&bbs2=$FORM{'bbs'}&kako2=true&key2=$FORM{'key'}\n";} |
608 |
|
|
else{$url.="&bbs2=$m_to&key2=$FORM{'key'}\n";} |
609 |
|
|
print " <br>\n"; |
610 |
|
|
print "<a href=\"$url\">押してください</a>"; |
611 |
|
|
|
612 |
|
|
|
613 |
|
|
} |
614 |
|
|
|
615 |
|
|
print <<"EOF"; |
616 |
|
|
</body> |
617 |
|
|
</html> |
618 |
|
|
EOF |
619 |
|
|
|
620 |
|
|
|
621 |
|
|
exit; |
622 |
|
|
} |
623 |
|
|
|
624 |
|
|
|
625 |
|
|
sub stop { |
626 |
|
|
my $datafile = $DATPATH . $FORM{'key'} . ".dat"; |
627 |
|
|
open(NUM,"<$datafile"); |
628 |
|
|
my @temp=<NUM>; |
629 |
|
|
close(NUM); |
630 |
|
|
my $num=@temp; |
631 |
|
|
|
632 |
|
|
open(OUT, ">> $datafile"); |
633 |
|
|
eval{flock(OUT,2)}; |
634 |
|
|
print OUT "真・スレッドストッパー<>真・スレッドストッパー<>停止<>書けませんよ( ̄ー ̄)ニヤリッ<>\n"; |
635 |
|
|
eval{flock(OUT,8)}; |
636 |
|
|
close(OUT); |
637 |
|
|
|
638 |
|
|
#パーミッション調整 |
639 |
|
|
umask(0); |
640 |
|
|
chmod(0666,$datafile); |
641 |
|
|
chmod(0777,"$DATPATH"); |
642 |
|
|
chmod(0777,"$PATH"); |
643 |
|
|
|
644 |
|
|
&location |
645 |
|
|
} |
646 |
|
|
|
647 |
|
|
|
648 |
|
|
|
649 |
|
|
|
650 |
|
|
|
651 |
|
|
|
652 |
|
|
|
653 |
|
|
|
654 |
|
|
sub location{ |
655 |
|
|
$PATH = "./remake.cgi?bbs=$FORM{'bbs'}&key=$FORM{'key'}"; |
656 |
|
|
if ($SETTING{'BBS_LOCATION_CHECK'} eq 'checked') { |
657 |
|
|
print "Location: $PATH\n\n"; |
658 |
|
|
} else { |
659 |
|
|
print "Content-Type: text/html; charset=shift_jis\n\n"; |
660 |
|
|
print <<EOF; |
661 |
|
|
<html><head> |
662 |
|
|
<title>削除中</title> |
663 |
|
|
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> |
664 |
|
|
<META content=0;URL=$PATH http-equiv=refresh></head> |
665 |
|
|
<body bgcolor=#EEEEEE> |
666 |
|
|
削除中 |
667 |
|
|
</body></html> |
668 |
|
|
EOF |
669 |
|
|
} |
670 |
|
|
exit; |
671 |
|
|
} |
672 |
|
|
|
673 |
|
|
#エラー画面(エラー処理) |
674 |
|
|
#DispError(TITLE,TOPIC); |
675 |
|
|
sub DispError{ |
676 |
|
|
my $title=$_[0]; |
677 |
|
|
my $topic=$_[1]; |
678 |
|
|
print "Content-type: text/html; charset=shift_jis\n\n"; |
679 |
|
|
#----------------------------------------------------------------------- |
680 |
|
|
print <<EOF; |
681 |
|
|
<html> |
682 |
|
|
<head> |
683 |
|
|
<title>$title</title> |
684 |
|
|
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> |
685 |
|
|
</head> |
686 |
|
|
<body bgcolor="#FFFFFF"> |
687 |
|
|
<table width="650" border="1" cellspacing="0" cellpadding="10"> |
688 |
|
|
<tr> |
689 |
|
|
<td> |
690 |
|
|
<table width="640" border="0" cellspacing="0" cellpadding="0"> |
691 |
|
|
<tr> |
692 |
|
|
<td width="640"> |
693 |
|
|
<div align="left"><b>$topic</b></div> |
694 |
|
|
key =$FORM{'key'} |
695 |
|
|
bbs =$FORM{'bbs'} |
696 |
|
|
address =$FORM{'address'} |
697 |
|
|
</td> |
698 |
|
|
</tr> |
699 |
|
|
</table> |
700 |
|
|
</td> |
701 |
|
|
</tr> |
702 |
|
|
</table> |
703 |
|
|
<div align="center"></div> |
704 |
|
|
</body> |
705 |
|
|
</html> |
706 |
|
|
EOF |
707 |
|
|
#----------------------------------------------------------------------- |
708 |
|
|
exit; |
709 |
|
|
} |