#!/usr/bin/perl require './jcode.pl'; #---------------------------------- $ver="I-BOARD/2001 v2.4"; #(マルチデザインアイコンレス掲示板) #---------------------------------- # Copyright(C) りゅういち # E-Mail:ryu@cj-c.com # W W W :http://www.cj-c.com/ #---------------------------------- #--- 設定ファイル -------------* # 同じようにいくつでも増やせます。 # [ ]内の数字を使いCGIにアクセスするとその設定ファイルで動作します。 # $set[12] の設定ファイルを使う場合: http://www.xxx.com/cgi-bin/ibbs.cgi?no=12 $set[0]="./set.cgi"; $set[1]="./set1.cgi"; $set[2]="./set2.cgi"; $set[3]="./set3.cgi"; $set[4]="./set4.cgi"; # 禁止文字列 タグ使用の場合は禁止タグも入力OK # -> 同じようにいくつでも指定可能 # -> 特に指定しない場合は空行 () にする @NW = ("死ね"); # 排除IP/禁止文字列設定ファイル $IpFile="IpAcDeny.cgi"; $NWFile="WordDeny.cgi"; # ---[設定ここまで]-------------------------------------------------------------------------------------------------- # # # ---[排除IP/禁止文字列読み込み]------------------------------------------------------------------------------------- if(-e $NWFile){ open(DE,"$NWFile"); while(<DE>){$_=~ s/\n//g; push(@NW,$_);} close(DE); } if(-e $IpFile){ open(DE,"$IpFile"); while(<DE>){$_=~ s/\n//g; push(@ips,$_);} close(DE); } $match = 0; if(@ips){ foreach (@ips) {if ($ENV{'REMOTE_ADDR'} =~ /$_/) { $match=1; last; }} if($match){&er_("あなたには閲覧権限がありません!");} } # ---[設定ファイル読み込み]------------------------------------------------------------------------------------------ &d_code_; if($no eq ""){$no=0;} if($set[$no]){unless(-e $set[$no]){&er_('設定ファイルが無いです!');}else{require"$set[$no]";}} else{&er_('設定ファイルがCGIに設定されてません!');} $nf="<input type=\"hidden\" name=\"no\" value=$no>\n"; $res_r= 1; $a_link=1; # ---[フォームスタイルシート設定]------------------------------------------------------------------------------------ if($fss){ $fm=" onmouseover=\"this.style.$on\" onmouseout=\"this.style.$off\""; $ff=" onFocus=\"this.style.$on\" onBlur=\"this.style.$off\""; $fsi="$fst"; } # ---[簡易パスワード制限関連]---------------------------------------------------------------------------------------- if($s_ret){if($FORM{"P"} eq ""){&get_("P");} $P=$FORM{"P"}; $pf="<input type=\"hidden\" name=\"P\" value=\"$P\">\n"; $pp="&P=$P";} else{$pf=""; $pp="";} if($FORM{'KLOG'}){ $KLOG=$FORM{'KLOG'}; $TpON=1; $ThON=0; $TOPH=1; unless($KLOG=~ /^[\d]+/){&er_("そのファイルは閲覧できません!");} $log="$klog_d\/$KLOG\.txt"; $pp.="&KLOG=$KLOG"; $pf.="<input type=\"hidden\" name=\"KLOG\" value=$KLOG>\n"; } if($s_ret && $P eq "" && $mode eq ""){&pas_;} if($s_ret==2 && $P eq "R"){&er_("パスワードが違います!");} if($s_ret && $P ne "R"){if($P ne "$s_pas"){&er_("パスワードが違います!");}else{&set_("P");}} if($NMAX){$NM=" maxlength=$NMAX";} if($CMAX){$CM="/半角$CMAX文字以内";} if($TMAX){$TM=" maxlength=$TMAX";} # ---[サブルーチンの読み込み/表示確定]------------------------------------------------------------------------------- if($mode eq "all"){&all_;} if($mode eq "bma"){&bma_;} if($mode eq "man"){&man_;} if($mode eq "wri"){&wri_;} if($mode eq "w_m"){&w_m_;} if($mode eq "del"){&del_;} if($mode eq "s_d"){&s_d_;} if($mode eq "nam"){&hen_;} if($mode eq "h_w"){&h_w_;} if($mode eq "res"){&res_;} if($mode eq "key"){&key_;} if($mode eq "img"){&img_;} if($mode eq "ran"){&ran_;} if($mode eq "ed_"){&edit_del;} if($FORM{"H"} eq ""){if($TOPH){$FORM{"H"}="tp";}else{$FORM{"H"}="th";}} if($FORM{"H"} eq "th"){&html_;}elsif($FORM{"H"} eq "tp"){&html2_;} &html_; #--------------------------------------------------------------------------------------------------------------------- # [パスワード認証] # -> パスワード認証を行ないます(pas_) sub pas_ { &hed_("Pass Input"); print <<_PAS_; <center><table width="90\%"> <tr bgcolor="$ttb"><th>パスワード認証</th></tr> <tr><th>*書きこむにはパスワードが必要です!<form action="$cgi_f" method="$met"> <input type="password" size=8 name="P"$ff>$nf <input type="submit" value=" 認証 "$fm> </form></th></tr></table> _PAS_ if($s_ret==1){ print"記事の閲覧はできます(リードオンリー)\n"; print" <a href=\"$cgi_f?P=R&no=$no\"><b>記事を閲覧する</b></a>\n"; } &foot_; } #--------------------------------------------------------------------------------------------------------------------- # [トップページ表示] # -> トップページを表示します(html_) sub html_ { unless(-e $log){&l_m($log);} unless(-e $c_f){if($cou){&l_m($c_f);}} unless(-e $RLOG){if($M_Rank){&l_m($RLOG);}} &get_; if($FORM{'page'} eq ''){$page=0;}else{$page=$FORM{'page'};} $page_end=$page+($a_max-1); $PG=$page/$a_max; if($FORM{"H"} eq "New"){&hed_("New Thread/Topic","new","1");}else{&hed_("Page:$PG","all","1");} print"<center><table><tr><td>$com_top</td></tr></table><hr width=\"90\%\" color=\"$ttb\">"; if($P ne "R" && ($page == 0 || $FORM{"M"})){ if($o_mail){ if($c_pub){$Pch=" selected";} $Mbox= <<_MAIL_; <tr><td colspan=4>└>この記事関連のレスをメールで受信しますか? <input type="radio" name="send" value=1>YES <input type="radio" name="send" value=0 checked>NO / アドレス<select name="pubmail"> <option value=0>非公開 <option value=1$Pch>公開 </select></td></tr> _MAIL_ } if($FORM{"M"} && $res_n){ $HID ="<input type=\"hidden\" name=\"mode\" value=\"w_m\">\n"; $T_A =""; $T_F="<td><br></td><td></td>\n"; $MltiC="▽ 一括入力情報 ▽\n"; $Mlti2="<br>コメント、タイトルはそれぞれの記事の下のフォームより入力してください。<br>\n"; }else{ $HID ="<input type=\"hidden\" name=\"mode\" value=\"wri\"><input type=\"hidden\" name=\"type\" value=0>\n"; $T_A ="<tr><td colspan=4 bgcolor=\"$ttb\">Comment/ <small>(適当に改行を入れて下さい$CM)</small><br>\n"; $T_A.=" <textarea name=\"comment\" rows=8 cols=70 wrap=$wrap$ff></textarea></td></tr>\n"; $T_F ="<td bgcolor=\"$ttb\">Title</td><td>/<input type=\"text\" name=\"d_may\" size=25$ff$TM></td>\n"; $MltiC=""; $Mlti2=""; } if($UID){$IDv=" [ID:$pUID]";} print <<"_HTML_"; <form action="$cgi_f" method="$met">$nf$pf $HID$MltiC <table bgcolor="$k_back"> <tr><td bgcolor="$ttb">Name</td> <td>/<input type="text" name="name" value="$c_name" size=25$NM$ff>$IDv</td> $T_F</tr> <tr><td bgcolor=$ttb>E-Mail</td> <td>/<input type="text" name="email" value="$c_email" size=25$ff></td> <td bgcolor="$ttb">削除キー</td> <td>/<input type="password" name="delkey" value="$c_key" size=8$ff> <small>(半角8文字以内)</small></td></tr> $Mbox $T_A <tr><td bgcolor="$ttb">URL</td> <td colspan=3>/<input type="text" name="url" value="http://$c_url" size=65$ff></td></tr> _HTML_ if($#fonts){ print "<tr><td bgcolor=\"$ttb\">文字色</td><td colspan=3>/\n"; foreach (0 .. $#fonts) { if($c_font eq ""){$c_font="$fonts[0]";} print"<input type=\"radio\" name=\"font\" value=\""; if($c_font eq "$fonts[$_]"){print"$fonts[$_]\" checked><font color=\"$fonts[$_]\">■</font>\n";} else{print"$fonts[$_]\"><font color=\"$fonts[$_]\">■</font>\n";} } print"</td></tr>"; }else{print"<input type=\"hidden\" name=\"font\" value=\"$fonts[0]\">\n";} if($#hr){ print"<tr><td bgcolor=$ttb>枠線色</td><td colspan=3>/\n"; foreach (0 .. $#hr) { if($c_B eq ""){$c_B="$hr[0]";} print "<input type=\"radio\" name=\"hr\" value=\""; if($c_B eq "$hr[$_]"){print"$hr[$_]\" checked><font color=\"$hr[$_]\">■</font>\n";} else{print"$hr[$_]\"><font color=\"$hr[$_]\">■</font>\n";} } print"</td></tr>"; }else{print"<input type=\"hidden\" name=\"hr\" value=\"$hr[0]\">\n";} print"<tr>"; if((!$FORM{"M"} || ($FORM{"M"} && !$oya_f)) && $mel_f){ print"<td bgcolor=\"$ttb\">$sex_t</td><td colspan=3>/<select name=\"sex\">"; foreach(0..$#sex){ $C=""; if($sex[$_] eq "$c_sel"){$C=" selected";} print"<option value=\"$sex[$_]\"$C>$sex[$_] \n"; } print"</select></td></tr><tr>\n"; } if((!$FORM{"M"} || ($FORM{"M"} && !$oya_f)) && $txt_f){ print"<td bgcolor=\"$ttb\">$txt_k</td><td colspan=3>/"; print"<input type=\"text\" name=\"old\" value=\"$c_txt\" size=$txt_m maxlength=$txt_m$ff></td></tr><tr>\n"; } if ($i_mode) { print"<td bgcolor=\"$ttb\">Icon</td><td colspan=2>/<select name=\"ico\">\n"; foreach(0 .. $#ico1) { if($c_ico eq "$ico1[$_]"){print"<option value=\"$ico1[$_]\" selected>$ico2[$_]\n";} else{print"<option value=\"$ico1[$_]\">$ico2[$_]\n";} } print"</select><small>(画像を選択/"; print"<a href=\"$cgi_f?mode=img&no=$no$pp\" target=\"_blank\">サンプル一覧</a>)</small></td>\n"; }else{print "<td colspan=3></td>";} if($FORM{"M"} && $res_n){ print"<td><br></td></tr></table>$Mlti2<br>\n"; }else{ print"<td><input type=\"submit\" value=\"送 信\"$fm>\n"; print"<input type=\"reset\" value=\"リセット\"$fm></td></tr></table></form>\n"; } if($FORM{"H"} eq "New"){print"</center>\n"; &foot_;} } if($res_n && $P ne "R"){ if($FORM{"M"}){ print"<b>[<a href=\"$cgi_f?no=$no$pp&page=$page\">"; print"通常モードに戻る</a>]</b><hr width=\"90\%\" color=\"$ttb\">"; }else{ print"<b>[<a href=\"$cgi_f?no=$no$pp&page=$page&M=1\">"; print"このページをマルチレスモードにする</a>]</b><hr width=\"90\%\" color=\"$ttb\">"; } } if($Top_t){ print"<br><a name=\"list\"></a><table width=\"85\%\" border=1 bordercolor=\"$ttb\" cellpadding=2 cellspacing=0><tr>\n"; print"<td bgcolor=\"$k_back\"><center><b>$listi スレッドリスト</b> ( )内はレス数<hr size=1 color=\"$ttb\"></center>\n"; } @NEW=(); %RES=(); %N=(); $Rno=0; $K=1; $i=1; $NS=0; $ListFlag=0; $news=""; open(LOG,"$log") || &er_("Can't open $log"); while ($lines = <LOG>){ ($namber,$date,$name,$email,$d_may,$comment,$url,$font,$ico,$type,$delkey,$ip,$sml)=split(/<>/,$lines); ($Ip,$ID,$Sex,$Old,$Rank,$UT)=split(/:/,$ip); if($name eq ""){next;} $NS++; $Ti=time; if($type){ if($news eq ""){if(($Ti-$UT) <= $new_t*3600 && $UT){$news="$up_i_";}else{$news="$hed_i";}} if(($page < $i && $page_end >= $i-1) && $KLOG eq ""){$RES{$type}.="$lines";} if($Top_t){$N{$type}++;} }else{ push(@NEW,$lines); $i++; if($Top_t){ if($news eq ""){if(($Ti-$UT) <= $new_t*3600 && $UT){$news="$new_i";}else{$news="$hed_i";}} if($d_may eq ""){$d_may="無題";} if($N{$namber} eq ""){$N{$namber}=0;} $Rno++; $PAH=$a_max*$K; if($PAH <= $Rno){$PAL="page=$PAH&"; $K++;} if($Rno <= $LiMax || $FORM{"ListAll"}){ if($page eq $PAH-$a_max){print"<a href=\"#$namber\">";} else{print"<a href=\"$cgi_f?namber=$namber&mode=res&no=$no$pp\">";} print"$news $d_may($N{$namber})</a> |\n"; }elsif($FORM{"ListAll"} eq ""){$ListFlag=1;} } $news=""; } } close(LOG); if($Top_t){ if($ListFlag){print"<div align=\"right\">[<a href=\"$cgi_f?page=$page&ListAll=1&no=$no$pp#list\">全スレッドリスト表\示</a>]</div>";} print"</td></tr></table><br>\n"; } $total=@NEW; $RS=$NS-$total; %N=(); $IL=""; $page_=int(($total-1)/$a_max); $end_data = @NEW - 1; if($page_end >= $end_data){$page_end=$end_data;} $nl=$page_end+1; $bl=$page-$a_max; $plink=""; if($bl >= 0){$plink.="<a href=\"$cgi_f?no=$no&page=$bl$pp\">\<\;\<\;</a>\n";}else{$plink="\<\;\<\;\n";} $a=0; for($i=0;$i<=$page_;$i++){ $af=$page/$a_max; if($i != 0){$plink.="| ";} if($i eq $af){$plink.="<b>$i</b>\n";} else{$plink.="<a href=\"$cgi_f?page=$a&no=$no$pp\">$i</a>\n";} $a+=$a_max; } if($page_end ne $end_data){$plink.="<a href=\"$cgi_f?no=$no&page=$nl$pp\">>></a>\n";}else{$plink.="\>\;\>\;\n";} $Pg1=$page+1; $Pg2=$page_end+1; print"[全$totalスレッド($Pg1-$Pg2 表\示)] $plink</center>"; foreach ($page .. $page_end) { ($namber,$date,$name,$email,$d_may,$comment,$url,$font,$ico,$type,$delkey,$ip,$sml)=split(/<>/,$NEW[$_]); ($font,$b_col)=split(/;/,$font); ($Ip,$ID,$Sex,$Old,$Rank,$UT)=split(/:/,$ip); if($b_col eq ""){$b_col="$hr[0]";} if($email ne ""){$email="<a href=\"mailto:$email\">$emark</a>";} if($d_may eq ""){$d_may="(無題)"; } if($link_i){ if($url){ $url ="<a href=\"http://$url\" target=\"$TGT\">"; $url.="<img src=\"$l_img\" border=0 width=$h_wid height=$h_hei align=\"top\"></a>" } }else{if($url){$url="<a href=\"http://$url\" target=\"$TGT\">http://$url</a>"; }} $ICO=""; if($i_mode && $ico){ $ICO.="<img src=\"$i_dir/$ico\" align=\"middle\""; if($i_hei ){$ICO.=" height=$i_hei width=$i_wid>\n";}else{$ICO.=">\n";} } if($o_mail){if($sml){$sml="[メール受信:ON]";}else{$sml="[メール受信:OFF]";}} if($Sex){$Sex="[$sex_t:$Sex]";} if($Old){$Old="[$txt_k:$Old]";} if($a_link){&auto_($comment,$namber);} if($Inyo){$IL="<a href=\"$cgi_f?namber=$namber&mode=res&page=$page&no=$no&IN=$namber$pp#F\">引用</a>";} if($P eq "R"){print"";}elsif($res_n==2){ if($FORM{"M"} && $res_n){print"";} else{$ResSub="<a href=\"$cgi_f?namber=$namber&mode=res&page=$page&no=$no$pp\">このスレッドに返事を書く</a>";} } $QuoURL="$cgi_f?namber=$namber&mode=res&page=$page&no=$no$pp&IN=$namber#F"; $ResURL="$cgi_f?namber=$namber&mode=res&page=$page&no=$no$pp"; $res=0; (@RES)=split(/\n/,$RES{$namber}); if($KLOG eq ""){@RES=reverse(@RES);} if($#RES-$Res_h >= 0){$ResNo=$#RES-$Res_h+1;}else{$ResNo=0;} $Link=""; if($Res_h <= $#RES){ $a=$Res_t; $a2=1; $ResHy=$#RES/$Res_t; for($i=0;$i<=$ResHy;$i++){ if($#RES < $a){$a=$#RES+1;} $Link.="[<a href=\"$cgi_f?namber=$namber&mode=res&page=$page&RES=$a2\-$a&no=$no$pp\">$a2-$a</a>]\n"; $a2=$a+1; $a+=$Res_t; } }elsif($#RES < 0){$Link.="-";}else{$a2=$ResNo+1; $a=$#RES+1; $Link.="[$a2-$a]";} &design("OYA",$namber,$date,$name,$email,$d_may,$comment,$url,$ICO,$font,$b_col, $Ip,$ID,$Sex,$Old,$Rank,$t_font,$sml,$k_back,$IL,$ResSub,$Link,$QuoURL,$ResURL); foreach ($ResNo..$#RES) { ($rnam,$rdate,$rname,$rmail,$rd_may,$rcom,$rurl,$rfont,$rico,$rtype,$rdel,$rip,$rsml)=split(/<>/,$RES[$_]); ($rfont,$b_col)=split(/;/,$rfont); ($Ip,$ID,$Sex,$Old,$Rank,$UT)=split(/:/,$rip); if($b_col eq ""){$b_col="$hr[0]";} if($rmail ne "") { $rmail="<a href=\"mailto:$rmail\">$emark</a>"; } if($rd_may eq ""){ $rd_may="(無題)"; } if($link_i){ if($rurl){ $rurl ="<a href=\"http://$rurl\" target=\"$TGT\">"; $rurl.="<img src=\"$l_img\" border=0 width=$h_wid height=$h_hei align=\"top\"></a>" } }else{if($rurl){$rurl="<a href=\"http://$rurl\" target=\"$TGT\">http://$rurl</a>";}} $rico=~ s/\n//g; $ICO=""; if ($i_mode && $rico) { if($i_hei eq ""){$ICO.="<img src=\"$i_dir/$rico\" align=\"middle\">\n";} elsif($i_hei ne ""){$ICO.="<img src=\"$i_dir/$rico\" height=$i_hei width=$i_wid>\n";} } if($o_mail){if($rsml){$rsml="[メール受信:ON]";}else{$rsml="[メール受信:OFF]";}} if($Sex){$Sex="[$sex_t:$Sex]";} if($Old){$Old="[$txt_k:$Old]";} if($a_link){&auto_($rcom,$rtype);} if($Inyo){$IL="<a href=\"$cgi_f?namber=$rtype&mode=res&page=$page&no=$no&IN=$rnam$pp#F\">引用</a>";} $QuoURL="$cgi_f?namber=$rtype&mode=res&page=$page&no=$no$pp&IN=$rnam#F"; &design("RES",$rnam,$rdate,$rname,$rmail,$rd_may,$rcom,$rurl,$ICO,$rfont,$b_col, $Ip,$ID,$Sex,$Old,$Rank,$t_font,$rsml,$k_back,$IL,$ResSub,$Link,$QuoURL,$ResURL,$_+1); } &design("END","","","","","","","","","", "","","","","","","","","","",$ResSub,$Link,"",$ResURL); if($res_n==2 || $P eq "R"){print"<br>\n";}elsif($res_n==1){if($FORM{"M"}){print"";}else{&fom_($#RES);}} if($FORM{"M"} && $res_n && $P ne "R"){ if($ResMax && $ResNo >= $ResMax){print"<center><h4>レスが$ResMax件を超過 このスレッドには返信不可</h4></center>\n";} else{ print"<center><input type=\"hidden\" name=\"MTYPE\" value=\"$namber\">△ $d_may へのコメント /\n"; print"<input type=\"text\" name=\"MTITLE\" value=\"Re: $d_may\" size=30><br>\n"; print"<textarea name=\"MCOM\" COLS=70 ROWS=6></textarea><br><br>\n"; print"<input type=\"submit\" value=\" レスした記事をすべて送る \"></center>\n"; } } } if($FORM{"M"} && $res_n){print"</form>";} print "<hr width=\"90\%\" color=\"$ttb\"><ul><b>\n"; if($bl >= 0){print"<a href=\"$cgi_f?no=$no&page=$bl$pp\"><前の$a_maxスレッド</a>\n";} if($page_end ne $end_data){if($bl >= 0){print"| ";} print"<a href=\"$cgi_f?no=$no&page=$nl$pp\">次の$a_maxスレッド></a>\n";} print"</b><ul>( ページ移動 / $plink)</ul></ul>\n"; if($P eq "R"){ print"<center><b>記事投稿・編集・削除などは"; print"<a href=\"$cgi_f?no=$no\">認証</a>を行わないとできません!</b></center>\n"; }else{ print <<"_HTML_"; <center><table><tr><td> <form action="$cgi_f" method="$met">$nf$pf <table><tr><th bgcolor="$ttb" colspan=2>編集/削除フォーム</th></tr> <tr><td> 記事No<small>(半角数字)</small></td><td>/ <input type="text" name="del" size=8$ff style="ime-mode:disabled"> <select name="mode"> <option value="nam">編集 <option value="key">削除 </select> </td></tr> <tr><td> 削除キー</td><td>/ <input type="password" name="delkey" size=8$ff> <input type=submit value=" 送信 "$fm></td></tr> </table></form> </td><td valign="top"> <form action="$srch" method="$Met">$nf$pf <input type="hidden" name="andor" value="and"> <input type="hidden" name="logs" value="$log"> <table><tr><th bgcolor="$ttb">検索フォーム</th></tr> <tr><td>現在ログ[記事数/<b>$NS</b> <small>(親/$total レス/$RS)</small>]内を検索</td></tr> <tr><td>キーワード/ <input type="text" name="word" size=15$ff> <input type="submit" value=" 検 索 "$fm></td></tr> </table></form> </td></tr></table></center> _HTML_ } &foot_; } #-------------------------------------------------------------------------------------------------------------------- # [トピック一覧表示] # -> トピックを一覧表示(html2_) sub html2_ { @NEW=(); @RES=(); %R=(); %RES=(); $RS=0; if($FORM{'page'}){$page=$FORM{'page'};}else{$page=0;} open(LOG,"$log") || &er_("Can't open $log"); while (<LOG>) { ($namber,$date,$name,$email,$d_may,$comment,$url,$font,$ico,$type,$delkey,$ip,$sml)=split(/<>/,$_); ($Ip,$ID,$Sex,$Old,$Rank,$UT)=split(/:/,$ip); if($type){ $RS++; if($R{$type}){$R{$type}++;}else{$R{$type}=1;} if($OyaCount > $page+$tpmax || $page > $OyaCount+1){next;} if($date){$RES{$type}.="$_";} }else{push(@NEW,$_); $OyaCount=@NEW;} } close(LOG); $total=@NEW; $NS=$total+$RS; @lines=(); $PAGE=$page/($tpmax*2); &hed_("All Topic / Page: $PAGE","topic"); $Pg=$page+1; $Pg2=$page+$tpmax; if($Pg2 >= $total){$Pg2=$total;} print <<"_HTML_"; <center><table cellspacing=0 cellpadding=0><tr><td> $com_top </td></tr><tr><td> ■ $new_t時間以内に作成されたトピックは $new_i で表\示されます。<br> ■ $new_t時間以内に更新されたトピックは $up_i_ で表\示されます。<br> ■ トピックタイトルをクリックするとそのトピックの内容と返信を表\示します。 </td></tr></table><hr width="90\%" color="$ttb"> _HTML_ $end_data=@NEW-1; $page_end=$page+($tpmax-1); if($page_end >= $end_data){$page_end=$end_data;} $page_=int(($total-1)/($tpmax)); $nl = $page_end + 1; $bl = $page - $tpmax; if($bl >= 0){$Bl="<a href=\"$cgi_f?H=tp&page=$bl&no=$no$pp$Wf\">"; $Ble="</a>";}else{$Bl=""; $Ble="";} if($page_end ne $end_data){$Nl="<a href=\"$cgi_f?H=tp&page=$nl&no=$no$pp$Wf\">"; $Nle="</a>";}else{$Nl=""; $Nle="";} print"</center><ul>[ 全$totalトピック($Pg-$Pg2 表\示) ] \n"; $Plink="$Bl\<\;\<\;$Ble\n"; $a=0; for($i=0;$i<=$page_;$i++){ $af=$page/$tpmax; if($i != 0){$Plink.="| ";} if($i eq $af){$Plink.="<b>$i</b>\n";}else{$Plink.="<a href=\"$cgi_f?H=tp&page=$a&no=$no$pp$Wf\">$i</a>\n";} $a+=$tpmax; } $tim=time; $Plink.="$Nl\>\;\>\;$Nle\n"; print"$Plink</ul><center>"; print"<table width=\"90\%\" border=1 cellspacing=0 bordercolor=\"$ttb\"><tr bgcolor=\"$b_col\">\n"; if($mel_f){print"<th>$sex_t</th>";} if($txt_f){print"<th>$txt_k</th>";} print"<th>トピックタイトル</th><th>レス数</th><th>トピック作成者</th><th>最終発言者</th><th>最終更新</th></tr>\n"; foreach ($page .. $page_end) { ($namber,$date,$name,$email,$d_may,$comment,$url,$font,$ico,$type,$delkey,$ip,$sml)=split(/<>/,$NEW[$_]); ($Ip,$ID,$Sex,$Old,$Rank,$UT)=split(/:/,$ip); if((($tim-$UT) <= $new_t*3600) && $UT){$news="$new_i";}else{$news="$hed_i";} if($email){$name="$name <a href=\"mailto:$email\">$emark</a>";} if($ID){$name="$name<br><small><font color=\"$IDCol\">[ID:$ID]</font></small>";} if($d_may eq ""){$d_may="(無題)";} if(length($d_may)>$t_max){$d_may=substr($d_may,0,($t_max-2)); $d_may="$d_may..";} if(length($date)>11){$date=substr($date,5,16);} $sel="$Sex"; $txt="$Old"; $ksu=1; $BeTime=0; @RES= split(/\n/,$RES{$namber}); if(@RES){ ($rnam,$rd,$rname,$rmail,$rdm,$rcom,$rurl,$rfont,$rico,$rtype,$rdel,$rip,$rsml)=split(/<>/,$RES[0]); ($Ip,$ID,$Sex,$Old,$Rank,$UT)=split(/:/,$rip); if($oya_f==0){$sel="$Sex"; $txt="$Old";} if($rmail){$rn="$rname <a href=\"mailto:$rmail\">$emark</a>";}else{$rn="$rname";} if($ID){$rn="$rn<br><small><font color=\"$IDCol\">[ID:$ID]</font></small>";} if(length($rd)>11){$rdd=substr($rd,5,16);}else{$rdd=$rd;} if((($tim-$UT) <= $new_t*3600) && $UT){$news="$up_i_";}else{$news="$hed_i";} } if($rdd eq ""){$rdd="$date";} if($rn eq "") {$rn="$name";} $FL="<br><small>└#$namber [作成:$date]"; if($Res_t < $R{"$namber"}){ $a=0; $PG_=int(($R{"$namber"}-1)/$Res_t); $RP=""; for($j=0;$j<=$PG_;$j++){ $a2=$j*$Res_t+1; $a=($j+1)*$Res_t; if($a > $R{"$namber"}){$a=$R{"$namber"};} $RP.="<a href=\"$cgi_f?mode=res&namber=$namber&page=$page&RES=$a2-$a&H=tp&no=$no$pp\">$j</a>\n"; } if($FL){$FL.=" [ $RP]";}else{$FL="<br> <small>[ $RP]";} } $FL.="</small>"; if($txt_f){if($txt){$Txt="<td>$txt</td>";}else{$Txt="<td>/</td>";}} if($mel_f){if($sel){$Sel="<td>$sel</td>";}else{$Sel="<td>/</td>";}} if($R{"$namber"}){$ksu=$R{"$namber"}; if($Res_t > $R{"$namber"}){$A=$R{"$namber"};}else{$A=$Res_t;}}else{$ksu=0;} print"<tr bgcolor=\"$k_back\" align=\"center\">$Sel$Txt"; print"<td align=\"left\"><a href=\"$cgi_f?mode=res&namber=$namber&page=$page&RES=1-$A&H=tp&no=$no$pp\">"; print"$news <b>$d_may</b></a>$FL</td><th>$ksu</th><td>$name</td><td>$rn</td><td><small>$rdd</small></td></tr>\n"; $rdd=""; $rn=""; $rid=""; } print"</table></center><br><hr width=\"90\%\" color=\"$ttb\"><ul><b>\n"; if($bl >= 0){print"<a href=\"$cgi_f?H=tp&no=$no&page=$bl$pp\"><前の$tpmaxトピック</a>\n";} if($page_end ne $end_data){if($bl >= 0){print"| ";} print"<a href=\"$cgi_f?H=tp&no=$no&page=$nl$pp\">次の$tpmaxトピック></a>\n";} print"</b><ul>( ページ移動 / $Plink)</ul></ul>\n"; if($P eq "R"){ print"</td></tr></table><br><b>記事投稿・編集・削除などは"; print"<a href=\"$cgi_f?no=$no\">認証</a>を行わないとできません!</center></b>\n"; }else{ print <<"_HTML_"; <center><table><tr><td> <form action="$cgi_f" method="$met">$nf$pf <table><tr><th bgcolor="$ttb" colspan=2>編集/削除フォーム</th></tr> <tr><td> 記事No<small>(半角数字)</small></td><td>/ <input type="text" name="del" size=8$ff style="ime-mode:disabled"> <select name="mode"> <option value="nam">編集 <option value="key">削除 </select> </td></tr> <tr><td> 削除キー</td><td>/ <input type="password" name="delkey" size=8$ff> <input type=submit value=" 送信 "$fm></td></tr> </table></form> </td><td valign="top"> <form action="$srch" method="$Met">$nf$pf <input type="hidden" name="andor" value="and"> <input type="hidden" name="logs" value="$log"> <table><tr><th bgcolor="$ttb">検索フォーム</th></tr> <tr><td>現在ログ[記事数/<b>$NS</b> <small>(親/$total レス/$RS)</small>]内を検索</td></tr> <tr><td>キーワード/ <input type="text" name="word" size=15$ff> <input type="submit" value=" 検 索 "$fm></td></tr> </table></form> </td></tr></table></center> _HTML_ } &foot_; } #--------------------------------------------------------------------------------------------------------------------- # [別ページレス] # -> 別ページレスを表示します(res_) sub res_ { if($FORM{"page"}){$page=$FORM{"page"};} &get_; @lines=(); $icom=""; open(DB,"$log"); while ($line = <DB>){ ($nam,$date,$name,$email,$d_may,$comment,$url,$font,$ico,$type) = split(/<>/,$line); if($FORM{"IN"} eq "$nam"){ $icom=">\; $comment"; $icom=~ s/<br>/\n>\; /g; if($tag){$icom=~ s/</</g; $icom=~ s/>/>/g;} } if($namber eq "$type"){push(@lines,"$line");} if($namber eq "$nam"){$OyaLine=$line; if($KLOG eq ""){last};} } close(DB); if($FORM{"KLOG"} eq ""){@lines=reverse(@lines);} unshift(@lines,"\n"); if($FORM{"RES"}=~/-/){ ($St,$En)=split(/-/,$FORM{"RES"}); $Com="$St-$En のレス記事を表\示"; $Low=$St; $High=$En; if($St<$En){if($En-$St > 50){$St=$En-49; $Com="幅が大きすぎたため $St-$En に変更";} $Low=$St; $High=$En;} if($St>$En){if($St-$En > 50){$En=$St+49; $Com="幅が大きすぎたため $St-$En に変更";} $Low=$En; $High=$St;} if($St eq ""){$Low=$En-10; $High=$En; $Com="幅が未指定のため $St-$En に指定";} if($En eq ""){$Low=$St; $High=$St+10; $Com="幅が未指定のため $St-$En に指定";} } #elsif($FORM{"RES"}==1){$Low=$#lines-$Res_t; $High=$#lines; $Com="レス1-$Res_tまで表\示";} #elsif($FORM{"RES"}==$Res_t){$Res_h=$Res_t; $Com="最新レス$Res_t表\示";} elsif($FORM{"RES"} eq "all"){$Low=1; $High=$#lines; $Com="全レス表\示";} #elsif($FORM{"IN"}){$Low=$#lines-$Res_h; $High=$#lines; $Com="通常/引用表\示";} elsif($FORM{"RES"} =~/[0-9]+/){$Low=$FORM{"RES"}; $High=$FORM{"RES"}; $Com="ResNo$FORM{'RES'}指定表\示";} else{$Low=$#lines-$Res_h+1; $High=$#lines; $Com="最新レス$Res_h件表\示";} if($Low < 1){$Low=1;} if($FORM{"mode2"}){$Com="記事No$namber指定表\示";} $Link="スレッド内ページ移動 /\n"; $NB=""; $a=$Res_t; $a2=1; $ResHy=$#lines/$Res_t; if($Low==1 || $FORM{"RES"} eq ""){$Link.="\<\;\<\;\n";} else{ $A2=$Low-$Res_t; if($A2 <= 0){$A2=1;} $A=$A2+$Res_t-1; if($A > $#lines-1){$A=$#lines;} $Link.="<a href=\"$cgi_f?namber=$namber&mode=res&page=$page&RES=$A2\-$A&no=$no$pp\">\<\;\<\;</a>\n"; $NB .="<b><a href=\"$cgi_f?namber=$namber&mode=res&page=$page&RES=$A2\-$A&no=$no$pp\"><前の$Res_tレス</a></b>"; } for($i=0;$i<=$ResHy;$i++){ if($#lines-1 < $a){$a=$#lines;} if($Low==$a2 && $High >= $a){$Link.="[$a2-$a]\n";} else{$Link.="[<a href=\"$cgi_f?namber=$namber&mode=res&page=$page&RES=$a2\-$a&no=$no$pp\">$a2-$a</a>]\n";} $a2=$a+1; $a+=$Res_t; } if($High >= $#lines || $FORM{"RES"} eq ""){$Link.="\>\;\>\;\n";} else{ $A2=$Low+$Res_t; $A=$A2+$Res_t-1; if($A > $#lines-1){$A=$#lines;} $Link.="<a href=\"$cgi_f?namber=$namber&mode=res&page=$page&RES=$A2\-$A&no=$no$pp\">\>\;\>\;</a>\n"; if($NB){$NB.=" |\n";} $NB .="<b><a href=\"$cgi_f?namber=$namber&mode=res&page=$page&RES=$A2\-$A&no=$no$pp\">次の$Res_tレス></a></b>\n"; } ($nam,$date,$Name,$email,$d_may,$comment,$url,$font,$ico,$type,$delkey,$ip,$sml) = split(/<>/,$OyaLine); ($font,$b_col)=split(/;/,$font); ($Ip,$ID,$Sex,$Old,$Rank,$UT)=split(/:/,$ip); if($d_may eq ""){$d_may="(無題)";} if($url){$url="<a href=\"http://$url\" target=\"$TGT\">http://$url</a>";} if($email){$email="<a href=\"mailto:$email\">$emark</a>";} $ICO=""; if($i_mode && $ico){ $ICO.="<img src=\"$i_dir/$ico\" align=\"middle\""; if($i_hei ){$ICO.=" height=$i_hei width=$i_wid>\n";}else{$ICO.=">\n";} } if($o_mail){if($sml){$sml="[メール受信:ON]";}else{$sml="[メール受信:OFF]";}} if($Sex){$Sex="[$sex_t:$Sex]";} if($Old){$Old="[$txt_k:$Old]";} if($a_link){&auto_($comment,$nam);} if($Inyo){$IL="<a href=\"$cgi_f?namber=$nam&mode=res&page=$page&no=$no&IN=$nam$pp#F\">引用</a>";} $QuoURL="$cgi_f?namber=$nam&mode=res&page=$page&no=$no&IN=$nam$pp#F"; $ResSub="<a href=\"#F\">レスフォームへ移動</a>"; $ResURL="#F"; $ResLink="-"; if($b_col eq ""){$b_col="$hr[0]";} &hed_(" [$namber:$d_may] RES ","","1"); print <<"_HTML_"; <center> <table width="90\%"> <tr><td colspan=2><a href="$cgi_f?H=$FORM{"H"}&page=$page&no=$no$pp"><一覧表\示に戻る</a></td></tr> <tr bgcolor="$ttb"><th colspan=2>記事No.$namber [$d_may] 返信ページ</th></tr> <tr bgcolor="$bg"><td width="25%" nowrap>($Com)</td> <td>$Link</td></tr></table> _HTML_ &design("OYA",$nam,$date,$Name,$email,$d_may,$comment,$url,$ICO,$font,$b_col, $Ip,$ID,$Sex,$Old,$Rank,$t_font,$sml,$k_back,$IL,$ResSub,$ResLink,$QuoURL,$ResURL); $tit=$d_may; foreach ($Low..$High){ ($nam,$date,$name,$email,$d_may,$comment,$url,$font,$ico,$type,$delkey,$ip,$sml) = split(/<>/,$lines[$_]); if(length($lines[$_]) < 10){last;} ($font,$b_col)=split(/;/,$font); ($Ip,$ID,$Sex,$Old,$Rank,$UT)=split(/:/,$ip); if($d_may eq ""){$d_may="(無題)";} if($url){$url="<a href=\"http://$url\" target=\"$TGT\">http://$url</a>";} if($email ne ""){$email="<a href=\"mailto:$email\">$emark</a>";} $ICO=""; if($i_mode && $ico){ $ICO.="<img src=\"$i_dir/$ico\" align=\"middle\""; if($i_hei ){$ICO.=" height=$i_hei width=$i_wid>\n";}else{$ICO.=">\n";} } if($o_mail){if($sml){$sml="[メール受信:ON]";}else{$sml="[メール受信:OFF]";}} if($Sex){$Sex="[$sex_t:$Sex]";} if($Old){$Old="[$txt_k:$Old]";} if($a_link){&auto_($comment,$type);} if($b_col eq ""){$b_col="$hr[0]";} if($Inyo){$IL="<a href=\"$cgi_f?namber=$type&mode=res&page=$page&no=$no&IN=$nam$pp#F\">引用</a>";} $QuoURL="$cgi_f?namber=$type&mode=res&page=$page&no=$no&IN=$nam$pp#F"; $ResSub="<a href=\"#F\">レスフォームへ移動</a>"; $ResURL="#F"; $ResLink="-"; &design("RES",$nam,$date,$name,$email,$d_may,$comment,$url,$ICO,$font,$b_col, $Ip,$ID,$Sex,$Old,$Rank,$t_font,$sml,$k_back,$IL,$ResSub,$ResLink,$QuoURL,$ResURL,$_); } &design("END","","","","","","","","","", "","","","","","","","","","",$ResSub,$ResLink,"",$ResURL); if($Top_t && $ThON){$Link="<a href=\"$cgi_f?no=$no$pp#list\">$listi スレッドリスト表\示</a> / "."$Link";} else{$Link="<small>[!スレッドリスト非表\示モード!]</small> "."$Link";} if($NB){print"<br><center>$NB</center>";} print"<a name=\"list\"><br></a><table width=\"90\%\"><tr><td bgcolor=\"$bg\" align=\"right\" colspan=2>$Link</td></tr>\n"; print"<tr><th bgcolor=\"$ttb\" colspan=2><a name=\"F\">返信フォーム</a></th></tr><tr bgcolor=\"$k_back\"><td colspan=2>\n"; $v=1; $IDv=" [ID:$pUID]"; if($FORM{"mode2"}){ if($type > 0){$Num="$type";}else{$Num="$namber";} print"<br><center><a href=\"$cgi_f?namber=$Num&mode=res&no=$no$pp\">→この記事の関連スレッドを表\示する</a></center>\n"; }else{&fom_($#lines+1);} print"</td></tr></table></center>\n"; &foot_; } #--------------------------------------------------------------------------------------------------------------------- # [フォーム] # -> 返信フォームを表示します(fom_) sub fom_ { if($icom){ $icom=~ s/</\<\;/g; $icom=~ s/>/\>\;/g; $icom=~ s/\"/\"\;/g; $icom=~ s/<>/\<\;\>\;/g; } if($KLOG){print"<center><h4>過去ログには返信できません!</h4></center>\n";} elsif($s_ret && $P ne "$s_pas"){print"<center><h4>書き込み権限がありません!</h4></center>\n";} elsif($ResMax && $_[0] >= $ResMax){print"<center><h4>レスが$ResMax件を超過 このスレッドには返信できません!</h4></center>\n";} else{ if($v){$LOW=8; $TI=$tit; if($tit=~ /^Re:/){$tit;}else{$tit="Re: $tit";}} else{ $LOW=4; $TI=$d_may; if($d_may=~ /^Re:/){$tit=$d_may;}else{$tit="Re: $d_may";}} if($ResAf){$RP=0;}else{$RP=$page;} if($o_mail){ if($c_pub){$Pch=" selected";} $Mbox= <<_MAIL_; <tr><td colspan=6>└>この記事関連のレスをメールで受信しますか? <input type="radio" name="send" value=1>YES <input type="radio" name="send" value=0 checked>NO / アドレス<select name="pubmail"> <option value=0>非公開 <option value=1$Pch>公開 </select></td></tr> _MAIL_ } $MF=""; if($txt_f && $oya_f==0){ $MF.="<td bgcolor=\"$ttb\">$txt_k</td><td>/<input type=\"text\" name=\"old\" size=$txt_m maxlength=$txt_m$ff></td>\n"; }else{$MF.="<td></td><td></td>";} if($mel_f && $oya_f==0){ $MF.="<td bgcolor=\"$ttb\">$sex_t</td><td>/<select name=\"sex\">"; $S=@sex;$s=0; for($i=0; $i < $S; $i++){ $C=""; if($i==0){$C=" selected";} $MF.="<option value=\"$sex[$i]\"$C>$sex[$i] \n"; } $MF.="</select></td>\n"; }else{$MF.="<td></td><td></td>";} print <<"_HTML_"; <center><form action="$cgi_f" method="$met">$nf$pf <input type="hidden" name="type" value="$namber"> <input type="hidden" name="page" value="$RP"> <input type="hidden" name="mode" value="wri"> _HTML_ if($FORM{"H"}){print"<input type=\"hidden\" name=\"H\" value=\"$FORM{'H'}\">\n";} if($FORMK){ if($icom){$icom=~ s/\n/ /g;} if($c_url){$Cu="<input type=\"hidden\" name=\"url\" value=\"http://$c_url\">";} if($c_B) {$Ch="<input type=\"hidden\" name=\"hr\" value=\"$c_B\">";} print <<"_HTML_"; $Cu$Ch △[$namber] $TI へ返信<table bgcolor="$k_back"><tr> <td bgcolor="$ttb">Name</td><td>/<input type="text" name="name" value="$c_name" size=15$NM$ff></td> _HTML_ if($#fonts){ print"<td bgcolor=\"$ttb\">FontColor</td><td>/<select name=\"font\">\n"; foreach (0 .. $#fonts) { if($c_font eq ""){$c_font="$fonts[0]";} print"<option value="; if($c_font eq "$fonts[$_]") { print"\"$fonts[$_]\" style=\"color:$fonts[$_]\" selected>■\n"; } else { print"\"$fonts[$_]\" style=\"color:$fonts[$_]\">■\n"; } } print"</select></td>"; }else{print"<input type=\"hidden\" name=\"font\" value=\"$fonts[0]\">\n";} print <<"_HTML_"; <td bgcolor="$ttb">削除キー</td><td>/<input type="password" name="delkey" size=8 value="$c_key"$ff></td></tr> <tr><td bgcolor="$ttb">E-Mail</td><td>/<input type="text" name="email" size=15 value="$c_email"$ff></td> $MF</tr>$Mbox <tr><td bgcolor="$ttb">コメント</td><td colspan=5>/<input type="text" name="comment" value="$icom" size=80$ff><br>$CM</td></tr> _HTML_ }else{ print <<"_HTML_"; △[$namber] $TI へ返信<table bgcolor="$k_back"><tr> <td bgcolor="$ttb">Name</td><td>/<input type="text" name="name" value="$c_name" size=15$NM$ff>$IDv</td> <td bgcolor="$ttb">Title</td><td>/<input type="text" name="d_may" size=20 value="$tit"$ff$TM></td> <td bgcolor="$ttb">削除キー</td><td>/<input type="password" maxlength=8 name="delkey" size=8 value="$c_key"$ff> </td></tr><tr> <td bgcolor="$ttb">E-Mail</td><td>/<input type="text" name="email" value="$c_email" size=25$ff></td> <td bgcolor="$ttb">URL</td><td colspan=3>/<input type="text" name="url" value="http://$c_url" size=50$ff></td></tr> </tr>$Mbox <tr><td colspan=6 bgcolor="$ttb">Comment$CM<br> <textarea name="comment" rows=$LOW cols=70 wrap="$wrap"$ff>$icom</textarea></td></tr> _HTML_ if($#fonts){ print"<tr><td bgcolor=\"$ttb\">文字色</td><td colspan=5>/\n"; foreach (0 .. $#fonts) { if($c_font eq ""){$c_font="$fonts[0]";} print"<input type=radio name=font value=\""; if($c_font eq "$fonts[$_]"){print"$fonts[$_]\" checked><font color=\"$fonts[$_]\">■</font>\n";} else{print"$fonts[$_]\"><font color=\"$fonts[$_]\">■</font>\n";} } print"</td></tr>"; }else{print"<input type=\"hidden\" name=\"font\" value=$fonts[0]>\n";} if($#hr){ print"<tr><td bgcolor=\"$ttb\">枠線色</td><td colspan=5>/\n"; foreach (0 .. $#hr) { if($c_B eq ""){$c_B="$hr[0]";} print "<input type=\"radio\" name=\"hr\" value=\""; if($c_B eq "$hr[$_]"){print"$hr[$_]\" checked><font color=\"$hr[$_]\">■</font>\n";} else{print"$hr[$_]\"><font color=\"$hr[$_]\">■</font>\n";} } print"</td></tr>"; }else{print"<input type=\"hidden\" name=\"hr\" value=\"$hr[0]\">\n";} if($i_mode){ print "<tr><td bgcolor=\"$ttb\">Icon</td><td>/<select name=\"ico\">\n"; foreach(0 .. $#ico1) { if($c_ico eq "$ico1[$_]"){print"<option value=\"$ico1[$_]\" selected>$ico2[$_]\n";} else {print "<option value=\"$ico1[$_]\">$ico2[$_]\n";} } print "</select></td>\n"; }else{print"<tr><td></td><td></td>";} print"$MF\n"; } print"<tr><td colspan=6 align=\"right\">\n"; if($AgSg){print"スレッドソ\ート/<select name=\"AgSg\"><option value=1$AgS>上げる(age)<option value=0$SgS>下げる(sage)</select>\n";} else{print"<input type=\"hidden\" name=\"AgSg\" value=1>\n";} print<<"_HTML_"; <input type="submit" value=" レス "$fm> <input type="reset" value="リセット"$fm> </td></tr></table></form></center><br> _HTML_ } } #--------------------------------------------------------------------------------------------------------------------- # [ログ書きこみ処理] # -> ログへ記事を書き込みます(wri_) sub wri_ { if($P eq "R"){&er_("書き込みできない権限です!");} if($KLOG){&er_("過去ログは書き込みできません!");} if($Proxy){ while(($envkey,$envvalue) = each(%ENV)){ if($envkey =~ /proxy|squid/i || $envvalue =~ /proxy|squid/i){ &er_("ProxyServer経由では書き込みできません!"); } } } if($name eq ""){&er_("名前 が未入力!");} if(length($delkey) > 8){&er_("削除キー は8文字以内!");} if($comment eq ""){&er_("コメント が未入力!");} if($NMAX && length($name) > $NMAX){&er_("名前 は$NMAX文字以内!");} if($CMAX && length($comment) > $CMAX){&er_("コメント は$CMAX文字以内!");} if($TMAX && length($d_may) > $TMAX){&er_("タイトル は$TMAX文字以内!");} if($email && $email !~ /(.*)\@(.*)\.(.*)/){&er_("E-Mail の入力内容が不正です!");} $urlnum = ($comment =~ s/http/http/ig); if ($urlnum >= 3) { &er_("URLの多数書き込みは禁止です"); } #平仮名が含まれなければエラー if($comment !~ /(?:\x82[\x9F-\xF1])/){ &er_("最低一文字の平仮名を本文中に記載してください"); } if($d_may eq ""){$d_may="(無題)";} if($ico eq "randam"){ srand; $randam = $#ico1; $ico = $ico1[int(rand($randam))]; if($ico eq "" || $ico eq "randam" || $ico eq "master"){ foreach(0..$#ico1){ if($ico1[$_] ne "ramdam" && $ico1[$_] ne "master"){$ico=$ico1[$_];} } } $CICO="randam"; }elsif($ico eq "master"){ $ICO_F=0; foreach (0..$#mas_p){if($mas_p[$_] eq $delkey){$ico=$mas_i[$_]; $ICO_F=1; last;}} if($ICO_F==0){&er_("管理者用アイコンは使用できません!");} $CICO="master"; }else{$CICO=$ico;} if($FORM{'URL'}){ ($KURL,$Ag) = split(/::/,$FORM{'URL'}); $ico=$icoc; $font=$fonrc; $hr=$hrc; $d_may=$FORM{"dmay"}; } if($UID){ if($Ag){$pUID=$Ag;}else{&get_("I");} if($pUID eq "n"){&er_("ブラウザのcookie機能\がOFFでは投稿不可。対応ブラウザにするか、ONにしてください!");} } if($pUID){&set_("I","$pUID");} if($tag){ $comment=~ s/\<\;/</g; $comment=~ s/\>\;/>/g; $comment=~ s/\"\;/\"/g; $comment=~ s/<>/\<\;\>\;/g; } $comment=~ s/\r\n/<br>/g; $comment=~ s/\r|\n/<br>/g; if($locks){&lock_($lockf);} open(LOG,"$log") || &er_("Can't open $log","1"); @lines = <LOG>; close(LOG); if($bup){&backup_;} ($knum,$kd,$kname,$kem,$ksub,$kcom) = split(/<>/,$lines[0]); $namber=$knum+1; if($kd eq "" && $kcom eq ""){shift(@lines);} $ipip=$ENV{'REMOTE_ADDR'}; if($C==0 || $mode eq "wri"){&set_;} &cry_($delkey); $SeMail=""; @new=(); if($M_Rank){&rank;} &time_(0); if($FORM{"send"}){$Se=$email;}else{$Se="";} if($FORM{"pubmail"}==0 && $o_mail){$email="";} $new ="$namber<>$date<>$name<>$email<>$d_may<>$comment<>$url<>$font;$hr<>$ico<>$type<>$epasswd<>"; $new.="$ipip\:$pUID\:$FORM{'sex'}\:$FORM{'old'}\:$R\:$Time:<>$Se<>\n"; $R=~ s/:/:/g; $FORM{"sex"}=~ s/\:/:/g; $FORM{"old"}=~ s/\:/:/g; if ($res_r == 1 && $type != 0) { @r_data=(); foreach (0 .. $#lines) { $resres = 0; ($nam,$d,$na,$mail,$d_m,$com,$u, $f,$i,$ty,$de,$ip,$sml) = split(/<>/,$lines[$_]); $ty=~ s/\n/0/g; $de=~ s/\n//g; $ip=~ s/\n//g; $i=~ s/\n//; $sml=~ s/\n//; if($name eq $na && $comment eq $com) { &er_("同じ内容は送信不可!","1"); } if($ty == 0 && $nam eq "$type"){ $new_line="$lines[$_]"; $resres=1; if($sml){if($SeMail !~ /$sml/){if($q_mail){$SeMail.=" $sml";}else{$SeMail.=",$sml";}}} if($FORM{"AgSg"}==0){ push(@new,"$new"); push(@new,@r_data); push(@new,$new_line); } }elsif($ty eq "$type"){ push(@r_data,$lines[$_]); $resres=1; if($sml){if($SeMail !~ /$sml/){if($q_mail){$SeMail.=" $sml";}else{$SeMail.=",$sml";}}} } if($resres==0){push(@new,$lines[$_]);} } if($FORM{"AgSg"}){ unshift(@new,$new_line); unshift(@new,@r_data); unshift(@new,"$new"); } }else{ $h=0; $ON=0; @KLOG=(); foreach (0 .. $#lines) { $lines[$_]=~ s/\n//; ($nam,$d,$na,$mail,$d_m,$com,$u, $f,$i,$ty,$de,$ip,$sml) = split(/<>/,$lines[$_]); if($lines[$_] eq "" || $d eq ""){next;} if($name eq $na && $comment eq $com) { &er_("同じ内容は送信不可!","1"); } $ty=~ s/\n/0/g; $de=~ s/\n//g; $ip=~ s/\n//g; $i=~ s/\n//; $sml=~ s/\n//; if($ty==0){$h++;} if(($nam eq $type || $ty eq $type) && $type > 0 && $res_r==0){ if($sml){if($SeMail !~ /$sml/){if($q_mail){$SeMail.=" $sml";}else{$SeMail.=",$sml";}}} } if($ON){if($klog_s){unshift(@KLOG,"$lines[$_]\n");}else{last;}} else{push(@new,"$lines[$_]\n");} if($h >= $max-1){$ON=1;} } } if($type){unshift(@new,"$namber<><><><><><><><><>$namber<><><><>\n");} else{unshift(@new,"$new");} open(LOG,">$log") || &er_("Can't write $log","1"); print LOG @new; close(LOG); if($klog_s && @KLOG){&log_;} if(-e $lockf){rmdir($lockf);} if($t_mail || $o_mail){&mail_;} if($s_ret){$P="$FORM{'P'}";} if($KURL){&ktai("書き込み","$KURL");} } #--------------------------------------------------------------------------------------------------------------------- # [記事一括削除] # -> ログをフォーマットします(s_d_) sub s_d_ { if($FORM{'pass'} ne "$pass"){&er_("パスワードが違います!");} open(DB,">$log"); print DB ""; close(DB); open(RA,">$RLOG"); print RA ""; close(RA); } #--------------------------------------------------------------------------------------------------------------------- # [マニュアル] # -> 最低限の内容を記述したマニュアルっぽいもの(man_) sub man_ { &hed_("Help"); if($TpON){$Tp=" トピック ";}else{$Tp="";} if($ThON){$Th=" スレッド ";}else{$Th="";} print <<"_HTML_"; <center><table width=90\%> <tr><th bgcolor="$ttb">$title ヘルプ</th></tr> <tr><td bgcolor="$k_back"><br> □ 基本事項/使用方法<ul> <li><b>電子掲示板(BBS)について</b> <ul><u>電子掲示板(BBS)とは、インターネット上で不特定多数に公開されている公の発言の場です。</u><ul> <li>無責任な発言や、他人の悪口・個人情報などは、書き込んではいけません。 <li>そのような記述があった場合、管理者権限により予\告なく削除され、然るべき処置がとられます。</ul></ul><br> <li><b>このBBSの記事表\示形態について</b> <ul><u>このBBSは$Tp$Th表\示型のBBSです。</u><ul> _HTML_ if($Tp){ print"<li>[トピック] ...記事を話題ごとに表\示します。ひとつの話題の多くの記事をスムーズに読む事ができます。<br>\n"; print"閲覧/返信したいトピック(話題)タイトルをクリックします。\n"; } if($Th){ print"<li>[スレッド] ...最初から記事内容を表\示します。一度に多くの話題に目を通すことができます。<br>\n"; print"初期表\示で$alk_su件のスレッド(話題)とそれぞれの最新$alk_rm件の返信記事を閲覧できます。"; } if($res_n==1){$rescom="<br>スレッド表\示の場合は、記事下のフォームから返信可能\です。";} print <<"_HTML_"; </ul></ul><br> <li><b>記事の投稿方法について</b><ul> <li><u>新しい話題を投稿するには...</u><br>初期ページの上部にある入力フォームに必要な情報を入力してください。<br> ページを移動していた場合は、上部/下部メニューの [新規作成] をクリックすると初期ページに戻ります。 <li><u>既に投稿されている記事に、返信記事を投稿するには...</u><br>返信したい記事を表\示し [返信] をクリックして、 必要な情報を入力してください。$rescom</ul><br> <li><b>その他のメニューについて</b><ul> <li>[検索] をクリックするとログ内の記事をキーワードをから検索できます。 _HTML_ if($M_Rank){print"<li>[発言ランク] をクリックすると名前を元に集計された投稿回数のランキングを表\示します。\n";} if($klog_s){print"<li>[過去ログ] をクリックすると過去の話題を閲覧できます。過去ログの検索は [検索] から行ないます。\n";} print <<"_HTML_"; </ul><br><li><b>このBBSの機能\について</b><ul> <li>話題を$max件まで保持し、それら話題内の記事には返信ができます。<br> 話題が$max件を超えた場合、更新日時が古い話題から _HTML_ if($klog_s){print" [過去ログ] へ保存されます。返信はできません。\n";}else{print"削除されます。\n";} if($ResMax){print"<br>また、各話題毎の返信限度数は、$ResMax件です。それ以上は返信できません。";} if($tag){print"<li>コメントにHTMLタグを利用することができます。";} else{print"<li>コメントにHTMLタグを利用することはできません。";} if($UID){ print"<li>投稿者には個別のIDが発行されます(ランダムな半角英数8文字)。他人に成りすますことを防ぎます。<br>\n"; print"この場合、ブラウザのcookieが ON でなければ投稿できません(ブラウザの初期設定ではONになっています)。\n"; } if($SPAM){ print"<li>メールアドレス自動収集ソ\フト対策のため、メールリンクに $SPAM という文字列を付加して表\示しています。<br>\n"; print"メールを送る際は $SPAM という文字列を削除してください。\n"; } if($res_n && $Th){ print"<li>マルチレスモードにすると一度にレスがつけられます(内容を別々にできるのはコメント、題名のみ / スレッド表\示のみ)。\n"; } print <<"_HTML_"; <li>cookieに対応しています。このBBSに関するcookieを削除することもできます。<br> cookie...ブラウザが入力内容を保存しておく機能\です。別のサイトで利用されることは通常ありません。 <li>記事投稿の際 削除キー(任意のパスワード) を入力することで、自分の投稿記事の編集/削除ができます。 <li>Noxxx で任意の記事に(xxx は半角数字の記事No)、>>xx で同スレッド内のレスに(xx は半角数字のResNo)にリンクします。 </ul></ul> </td></tr></table></center> _HTML_ &foot_; } #--------------------------------------------------------------------------------------------------------------------- # [ヘッダ表示] # -> HTMLヘッダを表示します(hed_) sub hed_ { print"Content-type: text/html; charset=Shift_JIS\n"; if($UID && $_[2]==1){ &get_("I"); if($pUID eq "n"){ $pUID=""; @UID = ('a'..'z','A'..'Z','0'..'9'); srand; $pUID.="$UID[int(rand(62))]"; $pUID.="$UID[int(rand(62))]"; $pUID.="$UID[int(rand(62))]"; $pUID.="$UID[int(rand(62))]"; $pUID.="$UID[int(rand(62))]"; $pUID.="$UID[int(rand(62))]"; $pUID.="$UID[int(rand(62))]"; $pUID.="$UID[int(rand(62))]"; &set_("I","$pUID"); } if($pUID eq "n"){$pUID="未発行";} } print"\n"; print <<"_HTML_"; <html><head> $STYLE $fsi <!--$ver--> <meta http-equiv="Content-type" content="text/html; charset=Shift_JIS"> <title>$title [$_[0]]</title></head> _HTML_ print"<body text=\"$text\" link=\"$link\" vlink=\"$vlink\" bgcolor=\"$bg\""; if($back ne ""){print" background=\"$back\">\n";}elsif($back eq ""){print ">\n";} print <<"_HED_"; <!--ヘッダ広告タグ挿入位置▽--> <!--△ここまで--> <center> _HED_ if($t_img eq "" && $tsize){print"<span style=\"font-size:$tsize;color:$tcolor;font-family:$tface;\">$title</span>\n";} elsif($t_img ne ""){print "<img src=\"$t_img\" width=$twid height=$thei>\n";} if($cou && $mode eq ""){&con_;} $MENU ="<table width=\"90\%\" bordercolor=\"$ttb\" border=1><tr bgcolor=\"$k_back\" align=\"center\">\n"; $MENU.="<td><a href=\"$backurl\">HOME</a></td>\n"; if($mode eq "man"){$MENU.="<td bgcolor=\"$b_col\">";}else{$MENU.="<td>";} $MENU.="<a href=\"$cgi_f?mode=man&no=$no$pp\">HELP</a></td>\n"; if($P ne "R" && $s_ret != 1){ if($page > 0 || $mode || $FORM{"H"} eq "tp"){$MENU.="<td><a href=\"$cgi_f?no=$no&H=New\">新規作成</a></td>\n";} elsif($FORM{"H"} eq "New"){$MENU.="<td bgcolor=\"$b_col\"><a href=\"$cgi_f?no=$no&H=New\">新規作成</a></td>\n";} else{$MENU.="<td>新規作成</td>\n";} } if($ThON){ if($_[1] eq "all"){$MENU.="<td bgcolor=\"$b_col\">";}else{$MENU.="<td>";} $MENU.="<a href=\"$cgi_f?H=th&no=$no$pp\">スレッド表\示</a></td>\n"; } if($TpON){ if($_[1] eq "topic"){$MENU.="<td bgcolor=\"$b_col\">";}else{$MENU.="<td>";} $MENU.="<a href=\"$cgi_f?H=tp&no=$no$pp\">トピック表\示</a></td>\n"; } if($M_Rank){ if($mode eq "ran"){$MENU.="<td bgcolor=\"$b_col\">";}else{$MENU.="<td>";} $MENU.="<a href=\"$cgi_f?mode=ran&no=$no$pp\">発言ランク</a>\n"; } $MENU.="<td><a href=\"$srch?no=$no$pp\">記事検索</a></td>\n"; if($klog_s){$MENU.="<td><a href=\"$srch?mode=log&no=$no$pp\">過去ログ</a></td>\n";} $MENU.="</tr></table>\n"; if($KLOG){print"<br>(現在 過去ログ$KLOG を表\示中)";} print"$MENU</center><br>\n"; } #--------------------------------------------------------------------------------------------------------------------- # [フッタ表示] # -> HTMLフッタを表示します(foot_) sub foot_ { print <<"_HTML_"; <hr width=90\% color=\"$ttb\"> <div align="right"> <form action="$cgi_f" method="$met">$nf$pf <input type="hidden" name="mode" value="del"> <input type="password" name="pass" size=6$ff> <input type=submit value="管理用"$fm> </form></div> <center>$MENU<br> <!--著作権表\示 削除しないでください--> - <a href="http://www.cj-c.com/" target="$TGT">I-BOARD</a> -</center> <!--フッタ広告タグ挿入位置▽--> <!--△ここまで--> </body></html> _HTML_ exit; } #--------------------------------------------------------------------------------------------------------------------- # [フォームデコード] # -> フォーム内容を解釈します(d_code_) sub d_code_ { $ag=$ENV{'HTTP_USER_AGENT'}; if ($ENV{'REQUEST_METHOD'} eq "POST") { if ($ENV{'CONTENT_LENGTH'} > 51200) { &er_("文章があまりに長すぎます!"); } read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,'sjis'); if(@NW){ foreach(0..$#NW){ if(index($value,$NW[$_]) >= 0){ $NW[$_]=~ s/</\<\;/g; $NW[$_]=~ s/>/\>\;/g; &er_("「$NW[$_]」は使用できません!"); } } } $value =~ s/&/&\;/g; $value =~ s/</\<\;/g; $value =~ s/>/\>\;/g; $value =~ s/\"/\"\;/g; $value =~ s/<>/\<\;\>\;/g; $value =~ s/<!--(.|\n)*-->//g; $FORM{$name} = $value; if($name eq "del"){push(@d_,$value);} if($name eq "MCOM"){unshift(@comment,"$value");} if($name eq "MTYPE"){unshift(@type,"$value");} if($name eq "MTITLE"){unshift(@title,"$value");} } $d_may= $FORM{'d_may'}; $name = $FORM{'name'}; $comment=$FORM{'comment'}; $email =$FORM{'email'}; $url = $FORM{'url'}; $url=~ s/^http\:\/\///; $mode = $FORM{'mode'}; $ico = $FORM{'ico'}; $font = $FORM{'font'}; $kiji = $FORM{'kiji'}; $namber=$FORM{'namber'}; $type = $FORM{'type'}; $delkey=$FORM{"delkey"}; $mo =$FORM{"mo"}; $hr =$FORM{"hr"}; $no =$FORM{"no"}; } #--------------------------------------------------------------------------------------------------------------------- # [時刻取得] # -> 時刻を取得します(time_) sub time_ { if($_[0]){$Time=$_[0];}else{$Time=time;} $ENV{'TZ'} = "JST-9"; ($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime($Time); $year=$year+1900; $mon++; if($mon < 10){$mon ="0$mon"; } if($mday < 10){$mday="0$mday";} if($hour < 10){$hour="0$hour";} if($min < 10){$min ="0$min"; } if($sec < 10){$sec ="0$sec"; } $week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat') [$wday]; $date = "$year\/$mon\/$mday\($week\) $hour\:$min\:$sec"; } #--------------------------------------------------------------------------------------------------------------------- # [UNIX時間逆算] (杜甫々さんのラウンジを参考にしました -> http://tohoho.wakusei.ne.jp/www.htm) # -> UNIX時間を年月日から逆算します (mktime) sub mktime{ #&mktime($year, $mon, $mday, $hour, $min, $sec, $tz); local($year, $mon, $mday, $hour, $min, $sec, $tz) = @_; local(@mdays, $xtime); @mdays = ( 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334); $uru = int(($year - 72) / 4); if (((($year + 1900) % 4) == 0) && ($mon < 2)) { $uru--; } $xtime = $year - 70; $xtime = ($xtime * 365) + $mdays[$mon] + $mday + $uru; $xtime = ($xtime * 24) + $hour + $tz; $xtime = ($xtime * 60) + $min; $xtime = ($xtime * 60) + $sec; return($xtime); } #--------------------------------------------------------------------------------------------------------------------- # [cookie発行] # -> cookie の発行処理を行ないます(set_) sub set_ { if($_[0] eq "I"){$kday=1826;}else{$kday=30;} ($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg) = gmtime(time + 30*24*60*60); $yearg += 1900; if($secg < 10){$secg ="0$secg"; } if($ming < 10){$ming ="0$ming"; } if($hourg < 10){$hourg="0$hourg";} if($mdayg < 10){$mdayg="0$mdayg";} $month = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')[$mong]; $youbi = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday')[$wdayg]; $date_gmt = "$youbi, $mdayg\-$month\-$yearg $hourg:$ming:$secg GMT"; if($_[0] eq "P"){print"Set-Cookie: $s_pas=$s_pas; expires=$date_gmt\n";} elsif($_[0] eq "I"){print"Set-Cookie: UID=$_[1]; expires=$date_gmt\n";} else{ if($SEL_C){$Csel=",sel:$FORM{'sex'}";}else{$Csel="";} if($TXT_C){$Ctxt=",txt:$FORM{'old'}";}else{$Ctxt="";} $cook ="name\:$name\,email\:$email\,url\:$url\,ico\:$CICO\,font\:$font\,hr\:$hr\,delkey\:$delkey"; $cook.="\,pub\:$FORM{'pubmail'}$Csel$Ctxt"; print "Set-Cookie: IBBS=$cook; expires=$date_gmt\n"; } } #--------------------------------------------------------------------------------------------------------------------- # [cookie取得] # -> cookie の取得処理を行ないます(get_) sub get_ { $cookies = $ENV{'HTTP_COOKIE'}; @pairs = split(/;/,$cookies); foreach $pair (@pairs) { ($NAME, $value) = split(/=/, $pair); $NAME=~ s/ //g; $DUMMY{$NAME} = $value; } if($_[0] eq "P"){if($DUMMY{"$s_pas"}){$FORM{"P"}=$DUMMY{"$s_pas"};}} elsif($_[0] eq "I"){if($DUMMY{'UID'}){$pUID=$DUMMY{'UID'};}else{$pUID="n";}} else{ @pairs = split(/,/,$DUMMY{'IBBS'}); foreach $pair (@pairs) { ($name, $value) = split(/:/, $pair); $COOKIE{$name} = $value; } $c_name =$COOKIE{'name'}; $c_email=$COOKIE{'email'}; $c_url =$COOKIE{'url'}; $c_ico =$COOKIE{'ico'}; $c_font =$COOKIE{'font'}; $c_B =$COOKIE{'hr'}; $c_key =$COOKIE{'delkey'};$c_pub =$COOKIE{'pub'}; if($FORM{'name'}){$c_name =$FORM{'name'};} if($FORM{'email'}){$c_email=$FORM{'email'};} if($FORM{'url'}) {$c_url =$url;} if($FORM{'ico'}) {$c_ico =$CICO;} if($FORM{'font'}){$c_font =$FORM{'font'};} if($FORM{'hr'}) {$c_B =$FORM{'hr'};} if($FORM{'delkey'}){$c_key=$FORM{'delkey'};} if($FORM{'pubmail'}){$c_pub=$FORM{'pub'};} if($SEL_C){$c_sel=$COOKIE{'sel'};} if($TXT_C){$c_txt=$COOKIE{'txt'};} } } #--------------------------------------------------------------------------------------------------------------------- # [管理ページ] # -> 管理用のページ(del_) sub del_ { if($FORM{'pass'} ne "$pass"){&er_("パスワードが違います!");} &hed_("Manager System"); print"<center><table width=\"90\%\" cellpadding=5 cellspacing=0 border=0>\n"; print"<tr><td align=\"right\" colspan=9><a href=\"http://www.cj-c.com/help/ibbs.html\" target=\"$TGT\">管理モードヘルプ</td></tr><tr>\n"; print"<th bgcolor=\""; if($FORM{"mode2"} eq "del" || $FORM{"mode2"} eq ""){print"$ttb"; $MODE="記事削除システム";}else{print"$k_back";} print"\" width=\"18\%\"><a href=\"$cgi_f?mode=del&mode2=del&pass=$FORM{'pass'}&no=$no$pp\">記事削除</a></th><th> </th>\n"; print"<th bgcolor=\""; if($FORM{"mode2"} eq "ip"){print"$ttb"; $MODE="アクセス排除IPアドレス/禁止文字列追加システム";}else{print"$k_back";} print"\" width=\"18\%\"><a href=\"$cgi_f?mode=del&mode2=ip&pass=$FORM{'pass'}&no=$no$pp\">排除IP/禁止文字</a></th><th> </th>\n"; print"<th bgcolor=\""; if($FORM{"mode2"} eq "skn"){print"$ttb"; $MODE="スキン変更システム";}else{print"$k_back";} print"\" width=\"18\%\"><a href=\"$cgi_f?mode=del&mode2=skn&pass=$FORM{'pass'}&no=$no$pp\">スキン変更</a></th><th> </th>\n"; #print"<th bgcolor=\""; #if($FORM{"mode2"} eq "log"){print"$ttb"; $MODE="過去ログHTML化システム";}else{print"$k_back";} #print"\" width=\"18\%\"><a href=\"$cgi_f?mode=del&mode2=log&pass=$FORM{'pass'}&no=$no$pp\">過去ログHTML化</a></th><th> </th>\n"; print"<td width=\"18\%\"></td><td></td>"; print"<th bgcolor=\""; if($FORM{"mode2"} eq "etc"){print"$ttb"; $MODE="その他の管理者機能\";}else{print"$k_back";} print"\" width=\"18\%\"><a href=\"$cgi_f?mode=del&mode2=etc&pass=$FORM{'pass'}&no=$no$pp\">その他機能\</a></th>\n"; print"</tr><tr><th bgcolor=\"$ttb\" colspan=9>管理モード [$MODE]</th></tr>\n"; if($FORM{"mode2"} eq "del" || $FORM{"mode2"} eq ""){ @NEW=(); %RES=(); $Tkiji=0; open(DB,"$log"); while(<DB>){ ($namber,$date,$name,$email,$d_may,$comment,$url,$font,$ico,$type) = split(/<>/,$_); if($name){if($type){$RES{$type}.="$_";}else{push(@NEW,$_);} $Tkiji++;} } close(DB); $total=@NEW; $Rkiji=$Tkiji-$total; undef(@lines); if(-s $log){$l_size=-s $log;}else{$l_size=0;} $page_=int(($total-1)/$a_max); if($FORM{'page'} eq ''){$page=0;}else{$page=$FORM{'page'};} $end_data=@NEW-1; $page_end=$page+($a_max-1); if($page_end >= $end_data){$page_end=$end_data;} $PG=$page/5; print <<"_HTML_"; <tr><td colspan=6> <ul> <li>ログサイズ/$l_sizeバイト 記事数/$Tkiji <small>(親/$total レス/$Rkiji)</small> <li>記事を編集したい場合、その記事のタイトルをクリック。 <li>削除したい記事にチェックを入れ「削除」ボタンを押します。 <li>名前の下の数字は IPアドレスです。 <li>親記事を削除するとレス記事もすべて削除されます。 <li>レス記事は最新$Res_h件が表\示されます。 </ul> </td><td colspan=3> <form action="$cgi_f" method="$met">$nf$pf <input type="hidden" name="mode" value="key"><input type="hidden" name="mo" value="1"> <input type="hidden" name="pass" value="$FORM{'pass'}"> <b>[記事No指定削除]</b><br> ・記事Noを指定して削除可能\です。<br> ・記事No入力、[削除]を押してください。<br> 記事No(半角数字)/<input type="text" name="del" size=10 style="ime-mode:disabled"> <input type="submit" value="削 除"> </form> </td></tr></table> $msg <form action="$cgi_f" method="$met">$nf$pf <input type="hidden" name="mode" value="key"><input type="hidden" name="mo" value="1"> <input type="hidden" name="pass" value="$FORM{'pass'}"> <table border=1 width=90\% bordercolor="$ttb"> <tr bgcolor="$ttb"><th>チェック</th><th colspan=2>記事No</th> <th>タイトル</th><th>投稿者</th><th>コメント</th></tr> _HTML_ foreach ($page .. $page_end) { ($namber,$date,$name,$email,$d_may,$comment,$url,$font,$ico,$type,$delkey,$ip)=split(/<>/,$NEW[$_]); ($Ip,$ID,$Sex,$Old,$Rank,$UT)=split(/:/,$ip); $comment=~ s/<br>/ /g; if($tag){ $comment =~ s/</</g; $comment =~ s/>/>/g; } if(length($comment)>100){$comment=substr($comment,0,98); $comment=$comment . '..'; } if($email ne ""){ $name = "<a href=\"mailto:$email\">$name</a>"; } if($d_may eq ""){ $d_may= "(無題)"; } print <<"_HTML_"; <tr bgcolor="$k_back"><th><input type="checkbox" name="del" value="$namber"></th> <th nowrap>親記事</th><td align="center">[$namber]</td><td> <a href="$cgi_f?mode=nam&pass=$FORM{'pass'}&kiji=$namber&mo=1&no=$no$pp">$d_may</a></td> <td>$name<br><small>$Ip</small></td><td><a name=\"$namber\"></a>$comment</td></tr> _HTML_ $ResNo=0; (@RES)=split(/\n/,$RES{$namber}); @RES=reverse(@RES); if($#RES-$Res_h >= 0 && $FORM{"resopen"} != $namber){$ResNo=$#RES-$Res_h+1;}else{$ResNo=0;} if($ResNo){ print"<tr><th>|+|</th><td colspan=5>"; print"<a href=\"$cgi_f?page=$page&mode=del&pass=$FORM{'pass'}&resopen=$namber&no=$no$pp#$namber\">"; print" No.$namber関連スレッドのレスを全て表\示</a></th></tr>\n"; }elsif($FORM{"resopen"} == $namber){ print"<tr><th>|-|</th><td colspan=5>"; print"<a href=\"$cgi_f?page=$page&mode=del&pass=$FORM{'pass'}&no=$no$pp#$namber\">"; print" No.$namber関連スレッドのレスを$Res_h件表\示にする</a></th></tr>\n"; } foreach ($ResNo..$#RES) { ($rnam,$rdate,$rname,$rmail,$rd_may,$rcom,$rurl,$rfont,$rico,$rtype,$rd,$rip)=split(/<>/,$RES[$_]); ($Ip,$ID,$Sex,$Old,$Rank,$UT)=split(/:/,$rip); $ReN=$_+1; $resmsg= "<br><small>($rtypeレス$ReN)</small>"; $rcom=~ s/<br>/ /g; if($tag){$rcom=~ s/</</g; $rcom=~ s/>/>/g;} if(length($rcom) > 100){$rcom=substr($rcom,0,98); $rcom=$rcom.'..';} if($rmail ne "") {$rname="<a href=\"mailto:$rmail\">$rname</a>";} if($rd_may eq ""){$rd_may="(無題)";} print <<"_HTML_"; <tr bgcolor="$bg"><th><input type="checkbox" name="del" value="$rnam"></th> <td align="center" colspan=2>[$rnam]$resmsg</td> <td><a href="$cgi_f?mode=nam&pass=$FORM{'pass'}&kiji=$rnam&mo=1&no=$no$pp">$rd_may</a></td> <td>$rname<br><small>$Ip</small></td><td>$rcom</td></tr> _HTML_ } } print "</table><br><input type=submit value=\" 削除 \">\n"; print "<input type=reset value=\"リセット\"></form>\n"; $next_line = $page_end + 1; $back_line = $page - $a_max; if($back_line >= 0){ print"<b>[<a href=\"$cgi_f?page=$back_line&mode=del&pass=$FORM{'pass'}&no=$no$pp\">前の$a_max件</a>]</b>\n"; } if($page_end ne $end_data){ print"<b>[<a href=\"$cgi_f?page=$next_line&mode=del&pass=$FORM{'pass'}&no=$no$pp\">次の$a_max件</a>]</b>\n"; } print "<br><br>全ページ数 / \n"; $a=0; for($i=0;$i<=$page_;$i++){ $af=$page/$a_max; if($i eq $af){ print "[<b>$i</b>] \n";} else{print "[<a href=\"$cgi_f?mode=del&page=$a&pass=$pass&no=$no$pp\">$i</a>]\n";} $a+=$a_max; } }elsif($FORM{"mode2"} eq "ip"){ ($m,$Log)=split(/:/,$FORM{"m"}); if($m eq "Make"){ open(DB,">$Log") || &er_("Can't make $Log"); print DB ""; close(DB); chmod(0666,"$Log"); $msd="<h4>$Log作成完了</h4>"; }elsif($m eq "Add"){ $FORM{'u'}=~ s/\<\;/</g; $FORM{'u'}=~ s/\>\;/>/g; open(OUT,">>$Log"); print OUT "$FORM{'u'}\n"; close(OUT); $msd="<h4>$Logへ登録完了</h4>"; }elsif($m eq "Del"){ open(DB,"$Log"); @deny = <DB>; close(DB); @NEW = ();$F=0; foreach (0..$#deny) { foreach $u (@d_) {if($u eq "$_"){$F=1; last;}} if($F){$F=0; next;} push(@NEW,"$deny[$_]"); } open (DB,">$Log"); print DB @NEW; close(DB); $msd="<h4>$Log内削除完了</h4>"; } print<<"_HTML_"; <tr><td colspan=9> <ul> <li>指定した物が含まれているとそれぞれ排除されます。 <li><b>[排除IP?]</b><br>IPアドレスは4桁で構\成されており、通常4桁目がアクセス毎に変わります。よって、3桁目までを指定します。<br> 例) 127.0.0.1 を排除したい場合は 127.0.0. と指定。192.168.0.1 → 192.168.0. (*)自分のIPは絶対に設定しない! <li><b>[禁止文字列?]</b><br>使用されたくない文字列を指定します。大文字小文字は区別されます。<br> 例) 宣伝記事→URLを指定。タグ→開始タグの一部 <img <font 等。 </ul> </td></tr></table>$msd</center> _HTML_ @Deny=("$IpFile","$NWFile"); @Dcom=("排除IP","禁止文字列"); foreach(0..1){ if($mo){if($_==0){$mo=~ s/(\d+\.\d+\.\d+\.)(\d+)/$1/;}else{$mo="";}} if(-e "$Deny[$_]"){ open(DB,"$Deny[$_]") || &er_("Can't open $Deny[$_]"); @deny = <DB>; close(DB); print<<"_EDIT_"; <hr width="90%" color="$ttb"><ul><b>■ $Dcom[$_]の追加</b><ul> <form action="$cgi_f" method="$met">$nf$pf <input type="hidden" name="mode" value="del"><input type="hidden" name="mode2" value="ip"> <input type="hidden" name="pass" value="$FORM{"pass"}"><input type="hidden" name="m" value="Add:$Deny[$_]"> $Dcom[$_] /<input type="text" name="u" size="25" value="$mo"> (例/cj-c.com) <input type="submit" value="追 加"> </form></ul> <b>■ $Deny[$_] に登録済みの$Dcom[$_]</b><ul> <form action="$cgi_f" method="$met">$nf$pf <input type="hidden" name="mode" value="del"><input type="hidden" name="mode2" value="ip"> <input type=hidden name="pass" value="$pass"><input type="hidden" name="m" value="Del:$Deny[$_]"></ul> _EDIT_ foreach(0..$#deny){ $deny[$_]=~ s/\n//g; $deny[$_]=~ s/</\<\;/g; $deny[$_]=~ s/>/\>\;/g; print"<input type=\"checkbox\" name=\"del\" value=\"$_\">- $deny[$_]<br>\n"; } print"<br><input type=\"submit\" value=\"削 除\">"; print"<input type=\"reset\" value=\"リセット\"></form></ul>\n"; }else{ print<<"_EDIT_"; <hr width="90%" color="$ttb"><ul><b>■ $Dcom[$_]設定をするファイルの作成</b><ul> <li>$Dcom[$_]を設定するファイル($Deny[$_])がないのでオンラインで設定する場合、このファイルを作成する必要があります。 <li>このCGIのあるディレクトリに作成します(このディレクトリのパーミッションが777or755 である必要があります)。 <li>ここでうまく作成できない場合は同名ファイルをFTPから作成してください(パーミッション:666) <form action="$cgi_f" method=$met>$nf$pf <input type="hidden" name="mode" value="del"><input type="hidden" name="mode2" value="ip"> <input type="hidden" name="pass" value="$FORM{"pass"}"><input type="hidden" name="m" value="Make:$Deny[$_]"> <input type="submit" value="$Deny[$_] を作成する"> </form></ul></ul> _EDIT_ } } }elsif($FORM{"mode2"} eq "skn"){ local(@SET)=(); local($i,$Com,$SkinFlag)=0; local($SkinCom)=""; if($FORM{"Cng"} && -e "$DDIR\/$FORM{'Cng'}"){ if($locks){&lock_($lockf);} open(SET,"$set[$no]"); while(<SET>){ if($_ !~ /\$Dfile/){push(@SET,$_);} else{push(@SET,"\$Dfile\= \"$FORM{'Cng'}\"\;\t\t\# 初期スキンファイル\n"); $SkinFlag=1} } close(SET); if(! -w $set[$no]){chmod(0666,"$set[$no]")}; open (SET,">$set[$no]") || &er_("スキン変更失敗! 設定ファイルのパーミッションを 666 に変更してみてください","1"); print SET @SET; close(SET); if(-e $lockf){rmdir($lockf);} if($SkinFlag){$msg="<center><h4>スキンファイル $FORM{'Cng'} に変更完了</h4></center>"; $Dfile=$FORM{"Cng"};} else{$mag="<center><h4>スキンファイルの設定が設定ファイル内にありません</h4></center>";} } print <<"_HTML_"; <tr><td colspan=9> $msg<ul> <li>スキンファイルのあるディレクトリ( $DDIR )からHTMLファイルを検索します。 <li>背景色の違うものが、現在設定されているスキンファイル( $Dfile )です。 <li>ファイル名をクリックすると簡単な説明と動作イメージが表\示されます。 <li>動作イメージ表\示後、[このスキンファイルに変更する] をクリックするとスキンファイル設定を変更できます。 </ul> <center><table border=1 bordercolor="$ttb" width="90\%"> _HTML_ opendir(DIR,"$DDIR"); while($file=readdir(DIR)){ if($file && $file=~/.htm|.html/){ if($i==0){print"<tr>";} print"<td align=\"center\""; if($Dfile eq $file){print" bgcolor=\"$b_col\"";}else{print" bgcolor=\"$k_back\"";} print"><a href=\"$cgi_f?mode=del&mode2=skn&pass=$FORM{'pass'}&File=$file&no=$no$pp\">"; if($FORM{"File"} eq $file){$file="<i>$file</i>";} print"$file</a></td>\n"; if($i==4){print"</tr>"; $i=0;} $i++; } } closedir(DIR); if($i < 5){print"</tr>";} print"</table></center>"; if($FORM{"File"} && -e "$DDIR\/$FORM{'File'}"){ $Dfile=$FORM{'File'}; open(DE,"$DDIR\/$Dfile"); while(<DE>){ if($_=~/\<\!\-\-/){$Com=1; next;} if($_=~/\-\-\>/){last;} if($Com){$SkinCom.="$_";} } close(DE); print"<hr width=\"100%\" color=\"$ttb\">\n"; print"<center>[<a href=\"$cgi_f?mode=del&mode2=skn&pass=$FORM{'pass'}&Cng=$Dfile&no=$no$pp\">"; print"このスキンファイルに変更する</a>]</center>\n"; print"<pre>$SkinCom</pre>\n"; print"<br></td></tr><tr><th colspan=9 bgcolor=\"$ttb\">動作イメージ</th></tr></table>\n"; &design("OYA","xx","yyyy/mm/dd(week) hh:mm:ss","愛 望努","<a href=\"i\@sample.com\">$emark</a>", "サンプル(親記事)","ここに親記事のコメントが入ります。<br><br>このような感じになります。", "<a href=\"http://www.cj-c.com/\">http://www.cj-c.com/</a>", "(アイコン)",$font[0],$hr[0],"127.0.0.1","aaaaaaaa","[セレクト]","[テキスト]", "x回",$t_font,"[メール受信:YES]",$k_back,"引用","このスレッドに返信する","[1-1]","",""); &design("RES","yy","yyyy/mm/dd(week) hh:mm:ss","愛 望子","<a href=\"i\@sample.com\">$emark</a>", "サンプル(レス記事)","ここにレス記事のコメントが入ります。<br><br>このような感じになります。", "<a href=\"http://www.cj-c.com/\">http://www.cj-c.com/</a>", "(アイコン)",$font[0],$hr[0],"127.0.0.1","bbbbbbbb","[セレクト]","[テキスト]", "y回",$t_font,"[メール受信:YES]",$k_back,"引用","","","","","Y"); &design("END","","","","","","","","","", "","","","","","","","","","","このスレッドに返信する","[1-1]","",""); print"<br><center>[<a href=\"$cgi_f?mode=del&mode2=skn&pass=$FORM{'pass'}&Cng=$Dfile&no=$no$pp\">"; print"このスキンファイルに変更する</a>]</center>\n"; }else{print"</td></tr></table>\n";} }elsif($FORM{"mode2"} eq "log"){ print"<tr><td colspan=9>\n"; if($klog_s){ open(KLOG,"$klog_c"); $KLS = <KLOG>; close(KLOG); print <<"_COPY_"; <ul> 1. ファイルは isrch.cgi 等の名前でダウンロードされますので拡張子を .htm or .html に変更してください。<br> 2. またファイル名も適宜変更してください。<br> </ul><center> <form action="$srch" method="$met">$nf$pf <input type="hidden" name="mode" value="dl"><select name="logs"> _COPY_ foreach (1..$KLS){print"<option value=\"$_\.txt\">(過去ログ$_)\n";} print"</select><input type=\"submit\" value=\"HTML化ダウンロード\"></center>\n"; }else{print"過去ログ機能\を利用していないのでこの機能\は利用できません。";} print"</td></tr></table>\n"; }elsif($FORM{"mode2"} eq "etc"){ if($FORM{"mode3"} eq "Backup"){ @lines=(); open(DB,"$log"); while(<DB>){push(@lines,$_);} close(DB); &backup_; $msg="<h4>バックアップ完了</h4>"; undef(@lines); }elsif($FORM{"mode3"} eq "LockOff"){ $msg="<h4>ロック解除完了<br>"; if(-e $lockf){rmdir($lockf); $msg.="($lockf解除)";}else{$msg.="($lockf無し)";} if(-e $c_loc){rmdir($_cloc); $msg.="($c_loc解除)";}else{$msg.="($c_loc無し)";} $msg.="</h4>"; } if($FORM{"C"}){ open(NO,">$c_f") || &er_("Can't write $c_f",'0'); print NO $FORM{"C"}; close(NO); $cnt=$FORM{"C"}; $msg="<h4>カウンタ値編集完了</h4>"; } print<<"_HTML_"; <tr><td colspan=9> <center>$msg*JavaScript を ONにしてください*<hr width="100\%" color="$ttb"></center> <script language="JavaScript"> <!-- function Link(url) { if(confirm("本当に実行してもOKですか?\\n(実行すると内容は元に戻せません!)")){location.href=url;} else{location.href="#";} } //--> </script> _HTML_ if($bup){ if(-e $bup_f){ $bl=(-M $bup_f); $bh=sprintf("%.1f",24*$bl); $bl=sprintf("%.2f",$bl); $bs=int((-s $bup_f)/1024); $bc="あり($bs\KB / $bl日(約$bh時間)前)"; $Nb=$bup-$bl; $Nh=sprintf("%.1f",$Nb*24); }else{$bc="無し";} print <<"_BUP_"; <form action="$cgi_f" method="$met">$nf$pf <input type="hidden" name="mode" value="del"><input type="hidden" name="mode2" value="etc"> <input type="hidden" name="pass" value="$FORM{'pass'}"> <b>[バックアップ機能\]</b> <ul><input type="button" value="ログを修復" onClick="Link('$cgi_f?mode=bma&mode2=etc&pass=$FORM{"pass"}&no=$no$pp')"> / <input type="submit" value="Backup" name="mode3"><br> <li>[Backup]ボタンをクリックすると現在のログをバックアップします。 <li>バックアップ機\能\を使用している人のみ修復可能\です。<br> <li>バックアップ$bc <li>次のバックアップは $Nb日(約$Nh時間)後 (マイナスの値の場合、次のログ更新時) </ul></form><hr width="100\%" color="$ttb"> _BUP_ } if($cou){ open(NO,"$c_f") || &er_("Can't open $c_f"); $cnt = <NO>; close(NO); print<<"_HTML_"; <form action="$cgi_f" method="$met">$nf$pf<b>[カウンタ値の編集]</b> <ul> <input type="hidden" name="pass" value="$FORM{'pass'}"> <input type="hidden" name="mode" value="del"><input type="hidden" name="mode2" value="etc"> カウント数の編集 / <input type="text" name="C" value="$cnt" size=6> <input type="submit" value="編集"> </ul></form><hr width="100\%" color="$ttb"> _HTML_ } print <<"_HTML_"; <form action="$cgi_f" method="$met"><b>[ログフォーマット(初期化)]</b> <ul> <input type="button" value="フォーマット" onClick="Link('$cgi_f?mode=s_d&mode2=etc&pass=$FORM{"pass"}&no=$no$pp')"> <li>記事の記録してあるログと、発言ランクのログを初期化します。 <li>実行すると元に戻せなくなるので注意してください。 </ul> </form><hr width="100\%" color="$ttb"> <form action="$cgi_f" method="$met"><b>[ロックファイルの解除(削除)]</b> <ul> <input type="button" value="ロック解除" onClick="Link('$cgi_f?mode=del&mode2=etc&pass=$FORM{"pass"}&mode3=LockOff&no=$no$pp')"> <li>ロックファイルがどうしても削除されない場合に試してください。問題が無い場合はあまり使わないで下さい <ul> _HTML_ if(-e $lockf){print"<li>メインログ($lockf):ロック中\n";} if(-e $cloc){print"<li>カウンタログ($cloc):ロック中\n";} print<<"_HTML_"; </ul> <li>ロック中のログがあっても、ユーザが操作中の場合があります。しばらく様子を見て実行してください。 </ul></form> _HTML_ print"</td></tr></table>"; } &foot_; } #--------------------------------------------------------------------------------------------------------------------- # [記事編集] # -> 記事編集ページを表示します(hen_) sub hen_ { if($P eq "R"){&er_("権限がありません!");} if($mo eq ""){ if($FORM{'del'} eq ""){&er_("記事No が未入力!");} if($delkey eq ""){&er_("削除キー が未入力!");} $kiji=$FORM{'del'}; }elsif($mo==1){if($FORM{'pass'} ne "$pass"){ &er_("パスワードが違います!"); }} @new=(); $flag=0; open(DB,"$log"); while($line=<DB>){ ($namber,$date,$name,$email,$d_may,$comment,$url, $font,$ico,$type,$epasswd,$ip,$sml) = split(/<>/,$line); if($date eq ""){next;} if($kiji eq "$namber"){ if($mo eq ""){ if($epasswd eq ""){&er_("この記事は削除キーが存在しません!","$kiji");} &cryma_($epasswd,$delkey); if($delkey eq "$pass"){$ok="y";} if($ok eq "n"){&er_("パスワードが違います!");} $hen_l="$cgi_f?no=$no$pp"; }else{$hen_l="$cgi_f?mode=del&pass=$FORM{'pass'}&no=$no$pp";} $type=~ s/\n/0/g; $delkey=~ s/\n//g; $sml=~ s/\n//g; if($FORM{'pass'} eq ""){$FORM{'pass'}=$delkey;} &hed_("Message Editor"); $comment=~ s/<br>/\n/g; ($font,$hr)=split(/;/,$font); ($Ip,$ID,$Sex,$Old,$Rank,$UT)=split(/:/,$ip); if($tag){$comment=~ s/</</g; $comment =~ s/>/>/g;} if($o_mail){ if($sml){$SEL=" selected"; if($email eq ""){$email=$sml; $SEL2=" selected";}} $Mbox=<<"_M_"; <tr><td colspan=4>└関連レスをメールで受信する? <select name="send"> <option value=0>NO <option value=1$SEL>YES </select> / アドレス<select name="pubmail"> <option value=1>公開 <option value=0$SEL2>非公開 </select></td></tr> _M_ } print <<"_HTML_"; <center>$msg<table width="90\%"> <tr bgcolor="$ttb"><th>No.$namber [$d_may] の編集</th></tr> <tr bgcolor="$k_back"><td>□<a href="$hen_l"> BACK</a> <form action="$cgi_f" method="$met">$nf$pf <input type="hidden" name="pass" value="$FORM{'pass'}"> <input type="hidden" name="mode" value="h_w"> <input type="hidden" name="namber" value="$namber"><input type="hidden" name="mo" value="$mo"> <br><center><table> <tr><td bgcolor="$ttb">Name</td><td>/<input type="text" name="name" value="$name" size=35></td> <td bgcolor="$ttb">Title</td><td>/<input type="text" name="d_may" size=35 value="$d_may"></td></tr> <tr><td bgcolor="$ttb">E-Mail</td><td>/<input type="text" name="email" value="$email" size=35></td> <td bgcolor="$ttb">URL</td><td>/<input type="text" name="url" value="http://$url" size=50></td></tr> $Mbox <tr><td colspan=4 bgcolor="$ttb">Comment▽ <small>(適当に改行を入れて下さい)</small><br> <textarea name="comment" rows=12 cols=70 wrap="$wrap">$comment</textarea></td></tr> _HTML_ if($#fonts){ print"<tr><td bgcolor=\"$ttb\">文字色</td><td colspan=3>/\n"; foreach (0 .. $#fonts) { if($font eq ""){$font="$fonts[0]";} print"<input type=\"radio\" name=\"font\" value=\""; if($font eq "$fonts[$_]"){print"$fonts[$_]\" checked><font color=\"$fonts[$_]\">■</font>\n";} else{print"$fonts[$_]\"><font color=\"$fonts[$_]\">■</font>\n";} } print"</td></tr>"; }else{print"<input type=\"hidden\" name=\"font\" value=\"$fonts[0]\">\n";} if($#hr){ print"<tr><td bgcolor=\"$ttb\">枠線色</td><td colspan=3>/\n"; foreach (0 .. $#hr) { if($hr eq ""){$hr="$hr[0]";} print"<input type=\"radio\" name=\"hr\" value=\""; if($hr eq "$hr[$_]"){print"$hr[$_]\" checked><font color=\"$hr[$_]\">■</font>\n";} else{print"$hr[$_]\"><font color=\"$hr[$_]\">■</font>\n";} } print"</td></tr>"; }else{print"<input type=\"hidden\" name=\"hr\" value=\"$hr[0]\">\n";} if($mel_f){ print"<tr><td bgcolor=\"$ttb\">$sex_t</td><td colspan=3>/<select name=\"sex\">"; foreach(0..$#sex){ $C=""; if($sex[$_] eq "$Sex"){$C=" selected";} print"<option value=\"$sex[$_]\"$C>$sex[$_] \n"; } print"</select></td></tr>\n"; } if($txt_f){ print"<tr><td bgcolor=\"$ttb\">$txt_k</td><td colspan=3>/"; print"<input type=\"text\" name=\"old\" value=\"$Old\" size=$txt_m maxlength=$txt_m$ff></td></tr>\n"; } if($i_mode){ &get_; $ico=$c_ico; print "<tr><td bgcolor=\"$ttb\">Icon</td><td colspan=3>/<select name=\"ico\">\n"; foreach(0 .. $#ico1) { if($ico eq "$ico1[$_]"){print"<option value=\"$ico1[$_]\" selected>$ico2[$_]\n";} else {print "<option value=\"$ico1[$_]\">$ico2[$_]\n";} } print"</select><small>(<a href='$cgi_f?mode=img&no=$no$pp' target=\"_blank\">"; print"サンプル一覧</a>)</small></td></tr>\n"; }else{print"<tr><td colspan=4></td></tr>\n";} print <<"_EDIT_"; <tr><td colspan=4 align="right"><input type="submit" value=" 編 集 "> <input type="reset" value="リセット"></td></tr></table></center></form> </td></tr></table></center> _EDIT_ &foot_; } } } #--------------------------------------------------------------------------------------------------------------------- # [パスワード暗号化] # -> パスワードを暗号化します(cry_) sub cry_ { $time = time; ($p1, $p2) = unpack("C2", $time); $wk = $time / (60*60*24*7) + $p1 + $p2 - 8; @saltset = ('a'..'z','A'..'Z','0'..'9','.','/'); $nsalt = $saltset[$wk % 64] . $saltset[$time % 64]; $epasswd = crypt($_[0], $nsalt); } #--------------------------------------------------------------------------------------------------------------------- # [パスワード解読] # -> パスワードを複合化します(cryma_) sub cryma_ { if($_[0]=~ /^\$1\$/){$crptkey=3;}else{$crptkey=0;} $ok="n"; if(crypt($_[1], substr($_[0],$crptkey,2)) eq $_[0]){$ok = "y";} } #--------------------------------------------------------------------------------------------------------------------- # [削除処理] # -> 記事を削除します(key_) sub key_ { if($mo eq ""){ if($FORM{'del'} eq ""){&er_("記事No が 未入力!");} if($delkey eq ""){&er_("削除キー が未入力!");} }elsif($mo==1){if($FORM{'pass'} ne "$pass"){&er_("パスワードが違います! $ok $delkey");}} if($locks){&lock_($lockf);} @CAS=(); $I=0; open(DB,"$log") || &er_("Can't open $log","1"); while($mens = <DB>){ ($nam,$d,$na,$mail,$d_m,$com,$u,$f,$i,$ty,$epasswd,$ip) = split(/<>/,$mens); $type=~ s/\n/0/g; $epasswd=~ s/\n//g; $ip=~ s/\n//g; $DelFlag=0; if($d eq ""){push(@CAS,"$nam<><><><><><><><><>$nam<><><>\n"); $I=1; next;} foreach (0..$#d_) { if ($d_[$_] eq "$nam" || $d_[$_] eq "$ty") { if($mo eq "" && $d_[$_] eq "$nam"){ if($epasswd eq ""){&er_("この記事は削除キーが存在しません!","1");} &cryma_($epasswd,$delkey); if($delkey eq "$pass"){$ok="m";} if($ok eq "n"){ &er_("パスワードが違います! $ok $delkey","1"); } } $DelFlag=1; last; } } if($DelFlag){if($I==0){$mens="$nam<><><><><><><><><>$nam<><><>\n";}else{next;}} $I=1; push(@CAS,"$mens"); } close(DB); open (DB,">$log"); print DB @CAS; close(DB); if(-e $lockf){rmdir($lockf);} if($FORM{'URL'}){&ktai("削除","$FORM{'URL'}");} if($mo){$msg="<h4>削除完了</h4>"; &del_;}else{if($s_ret){$mo="$s_pas";} &html_;} } #--------------------------------------------------------------------------------------------------------------------- # [編集記事置換] # -> 編集記事を編集前の記事と置き換えます(h_w_) sub h_w_ { if($mo){if($FORM{'pass'} ne "$pass"){ &er_("パスワードが違います!"); }} if($NMAX && length($name) > $NMAX){&er_("名前は$NMAX文字以内!");} if($CMAX && length($comment) > $CMAX){&er_("名前は$CMAX文字以内!");} if($TMAX && length($d_may) > $TMAX){&er_("名前は$TMAX文字以内!");} if($email && $email !~ /(.*)\@(.*)\.(.*)/){&er_("E-メールの入力内容が不正です!");} if($tag){ $comment=~ s/\<\;/</g; $comment=~ s/\>\;/>/g; $comment=~ s/\"\;/\"/g; $comment=~ s/<>/\<\;\>\;/g; } $comment=~ s/\r\n/<br>/g; $comment=~ s/\r|\n/<br>/g; if($ico eq "randam"){ srand; $randam = $#ico1; $ico = $ico1[int(rand($randam))]; if($ico eq "" || $ico eq "randam" || $ico eq "master"){ foreach(0..$#ico1){ if($ico1[$_] ne "ramdam" && $ico1[$_] ne "master"){$ico=$ico1[$_];} } } }elsif($ico eq "master"){ $ICO_F=0; foreach (0..$#mas_p){if($mas_p[$_] eq $FORM{"pass"}){$ico=$mas_i[$_]; $ICO_F=1; last;}} if($ICO_F==0){&er_("管理者用アイコンは使用できません!");} }elsif($FORM{"URL"}){$ico=$icoc; $d_may=$FORM{"dmay"};} @new=(); $flag=0; if($locks){&lock_($lockf);} open(DB,"$log"); while($line = <DB>){ ($knam,$kda,$kname,$kemail,$kd_may,$kcomment,$kurl, $kfont,$kico,$kt,$kdel,$kip) = split(/<>/,$line); if($kda eq ""){push(@new,"$line"); next;} if($namber eq "$knam"){ if($mo eq ""){ &cryma_($kdel,$FORM{'pass'}); if($FORM{'pass'} eq "$pass"){$ok="m";} if($ok eq "n"){ &er_("パスワードが違います!","1"); } } if($EStmp){ &time_(""); $EditCom="$date 編集"; if($mo || $ok eq "m"){$EditCom.="(管理者)";}else{$EditCom.="(投稿者)";} if($comment !~ /([0-9][0-9]):([0-9][0-9]):([0-9][0-9]) 編集/){$EditCom.="<br><br>";}else{$EditCom.="<br>";} $comment=$EditCom.$comment; } $font="$font\;$hr"; ($Ip,$ID,$Sex,$Old,$Rank,$UT)=split(/:/,$kip); if($FORM{"send"}){$Se=$email;}else{$Se="";} if($FORM{"pubmail"}==0 && $o_mail){$email="";} $line="$namber<>$kda<>$name<>$email<>$d_may<>$comment<>$url<>$font<>$ico<>$kt<>$kdel<>"; $line.="$Ip\:$ID\:$FORM{'sex'}\:$FORM{'old'}\:$Rank:$UT:<>$Se<>\n"; $flag = 1; } push(@new,"$line"); } close(DB); if($flag==0){&er_("その記事Noは存在しません!");} if($flag==1){ open (DB,">$log"); print DB @new; close(DB); } if(-e $lockf){rmdir($lockf);} if($FORM{'URL'}){&ktai("編集","$FORM{'URL'}");} if($mo){$msg="<h4>編集完了</h4>"; &del_;} else{$msg="<h4>以下の内容で編集しました</h4>"; $FORM{"del"}=$namber; $delkey=$FORM{"pass"}; &hen_;} } #--------------------------------------------------------------------------------------------------------------------- # [ロック処理] # -> ロックファイルを生成します(lock_) sub lock_ { $lflag=0; foreach (1 .. 5) { if(mkdir($_[0], 0755)){$lflag=1; last;} else{sleep(1);} } if($lflag==0){ if(-e $_[0]){rmdir($_[0]);} &er_("LOCK is BUSY"); } } #--------------------------------------------------------------------------------------------------------------------- # [メール通知] # -> 投稿内容をメールで通知します(mail_) sub mail_ { $mail_subj = "$title の投稿通知"; if($type != 0 && $type ne ""){$type="($type Res)";} if($email eq ""){$email='nomail@xxx.xxx';} if($url ne "") {$urls ="http://$url";} if($d_may eq ""){$d_may="(無題)";} $Mail_Msg=<<"_MAIL_"; $mail_subj ---------------- $d_may $type $name($date) $email $urls $comment 返信は $iurl でお願いします -----------END-- _MAIL_ $Mail_Msg=~ s/<br>/\n/g; $Mail_Msg=~ s/\<\;/</g; $Mail_Msg=~ s/\>\;/>/g; $Mail_Msg=~ s/\"\;/\"/g; $Mail_Msg=~ s/\&\;/&/g; if($t_mail){ if($mymail){if($SeMail !~ /$mail[0]/){$SeMail="$mail[0]"."$SeMail";}} else{if(($email ne $mail[0]) && ($SeMail !~ /$mail[0]/)){$SeMail="$mail[0]"."$SeMail";}} } if($SeMail =~ /^\,|^ /){$SeMail=substr($SeMail,1);} &jcode'convert(*mail_subj,'jis'); &jcode'convert(*Mail_Msg,'jis'); if($SeMail){ if(open(MAIL,"| $s_mail $SeMail")) { print MAIL "X-Mailer: UPP MAILER\n"; print MAIL "To: $mail[0]\n"; print MAIL "From: $email\n"; print MAIL "Subject: $mail_subj\n"; print MAIL "MIME-Version: 1.0\n"; print MAIL "Content-type: text/plain; charset=ISO-2022-JP\n"; print MAIL "Content-Transfer-Encoding: 7bit\n"; print MAIL "$Mail_Msg\n"; close(MAIL); } } } #--------------------------------------------------------------------------------------------------------------------- # [URLなどを判断] # -> コメント内のリンク、文字色などを処理(auto_) sub auto_ { $_[0]="<!--c-->$_[0]"; $_[0]=~ s/>((>|>|>)[^<]*)/><font color=\"$res_f\">$1<\/font>/g; $_[0]=~ s/([^=^\"]|^)((http|ftp|https)\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\,\|]+)/$1<a href=\"$2\" target=\"$TGT\">$2<\/a>/g; $_[0]=~ s/([^\w^\.^\~^\-^\/^\?^\&^\+^\=^\:^\%^\;^\#^\,^\|]+)(>>|>>|>>)([0-9\-]+)/$1<a href=\"$cgi_f?namber=$_[1]&mode=res&RES=$3&no=$no$pp\" target=\"$TGT\">$2$3<\/a>/g; $_[0]=~ s/([^\w^\.^\~^\-^\/^\?^\&^\+^\=^\:^\%^\;^\#^\,^\|]+)(No|NO|no|No.|NO.|no.)([0-9]+)/$1<a href=\"$cgi_f?namber=$3&mode=res&mode2=1&no=$no$pp\" target=\"$TGT\">$2$3<\/a>/g; } #--------------------------------------------------------------------------------------------------------------------- # [カウンタ処理] # -> カウンタを動かしたり表示したりします(con_) sub con_ { if($locks){&lock_($c_loc);} open(NO,"$c_f") || &er_("Can't open $c_f","2"); $cnt = <NO>; close(NO); if($FORM{'mode'} eq "" && $FORM{'page'} eq "" && $ENV{'HTTP_REFERER'} !~ /$cgi_f/) { $cnt++; open(NO,">$c_f") || &er_("Can't write $c_f","2"); print NO $cnt; close(NO); } if(-e $c_loc){rmdir($c_loc);} while(length($cnt) < $fig){ $cnt = 0 . $cnt; } @cnts = split(//,$cnt); print"<br><br>"; if($m_pas){foreach(0..$#cnts){print"<img src=\"$m_pas/$cnts[$_]\.gif\" width=$m_wid height=$m_hei>";}} else{print"<font color=$c_co>$cnt</font>";} print"<br>\n"; } #--------------------------------------------------------------------------------------------------------------------- # [エラー表示] # -> エラー内容を表示します(er_) sub er_ { if(-e $lockf && $_[1]==1){rmdir($lockf);} if(-e $c_loc && $_[1]==2){rmdir($c_loc);} if($FORM{"URL"}){ ($KURL,$Ag) = split(/::/,$FORM{'URL'}); &ktai("ERROR-$_[0]<br>未","$KURL"); } if($MENU eq ""){&hed_("Error");} print "<center>ERROR - $_[0]</center><br>\n"; &foot_; } #--------------------------------------------------------------------------------------------------------------------- # [過去ログ] # -> 削除内容を過去ログに移動します(log_) sub log_ { open(NO,"$klog_c") || &er_("Can't open $klog_c"); $n = <NO>; close(NO); $klog_f="$klog_d\/$n\.txt"; unless(-e $klog_f){&log_n;} $klog_size=$klog_l*1024; if(-s $klog_f > $klog_size){&log_up;} open(LOG,">>$klog_f") || &er_("Can't write $klog_f"); print LOG @KLOG; close(LOG); } #--------------------------------------------------------------------------------------------------------------------- # [過去ログカウント] # -> 過去ログのカウントをアップします(log_up) sub log_up { $n++; open(NUM,">$klog_c") || &er_("Can't write $klog_c"); print NUM "$n"; close(NUM); $klog_f="$klog_d\/$n\.txt"; &log_n; } #--------------------------------------------------------------------------------------------------------------------- # [過去ログ生成] # -> 過去ログファイルを生成します(log_n) sub log_n { $new_flag = 1; open(DB,">$klog_f") || &er_("Can't write $klog_f"); print DB ""; close(DB); chmod(0666,"$klog_f"); } #--------------------------------------------------------------------------------------------------------------------- # [バックアップ処理] # -> ログ内容をバックアップファイルに記録します(backup_) sub backup_{ unless(-e $bup_f){&l_m($bup_f);} if(-M "$bup_f" > $bup || $FORM{"mode3"} eq "Backup"){ open(LOG,">$bup_f") || &er_("Can't write $bup_f"); print LOG @lines; close(LOG); } } #--------------------------------------------------------------------------------------------------------------------- # [修復処理] # -> バックアップファイルをログファイルに変換(リネーム)します(bma_) sub bma_ { if($FORM{'pass'} ne "$pass"){&er_("パスワードが違います!");} if(-e $lockf){rmdir($lockf);} if(-e $bup_f){rename ($bup_f,$log) || &er_("Rename Error");} else{&er_("バックアップがないので修復不可能\です!","1");} $msg="<h3>修復完了</h3>"; &del_; } #--------------------------------------------------------------------------------------------------------------------- # [画像表示] # -> アイコンのサンプル画像一覧を表示します(img_) sub img_ { &hed_("All Icon"); print"<center><table width=\"90\%\"><tr><th bgcolor=\"$ttb\">アイコン画像一覧</td></tr></table>\n"; print"<br><a href=\"javascript:close()\">|X| ウィンドウを閉じる</a><br><br>\n"; $I=0; $NORI=0; $page_=int(($#ico1+$#mas_i)/$Ico_kp); if($page_){ print"ページ移動 / "; if($FORM{'page'}){$page=$FORM{'page'};}else{$page=0;} $page_end=$page+($Ico_kp-1); if($page_end > ($#ico1+$#mas_i)){$page_end=($#ico1+$#mas_i);} for($i=0;$i<=$page_;$i++){ $af=$page/$Ico_kp; if($i != 0){print"| ";} if($i eq $af){print"<b>$i</b>\n";}else{print"<a href=\"$cgi_f?mode=img&page=$a&no=$no$pp\">$i</a>\n";} $a+=$Ico_kp; } }else{$page=0; $page_end=($#ico1+$#mas_i);} print"<table border=1 bordercolor=\"$ttb\">\n"; foreach ($page..$page_end){ if($I==0){print"<tr>";} $I++; if($ico1[$_] eq "randam"){print"<th width=$Ico_w>ランダム<br>アイコン</th>"} elsif($ico1[$_] eq "master"){ print"<th width=$Ico_w><img src=\"$i_dir/$mas_i[$NORI]\"><br>$norik[$NORI]</th>\n"; $NORI++; }elsif($ico1[$_] eq ""){ print"<th width=$Ico_w><img src=\"$i_dir/$mas_i[$NORI]\"><br>$norik[$NORI]</th>\n"; $NORI++; }else{print"<th width=$Ico_w><img src=\"$i_dir/$ico1[$_]\"><br>$ico2[$_]</th>\n";} if($I >= $Ico_h){print"</tr>"; $I=0;} } if($I+$NORI){print"</tr>";} print"</table></center>"; &foot_; } #--------------------------------------------------------------------------------------------------------------------- # [発言カウント] # -> 発言回数をカウントアップして保存します(rank) sub rank { open(IN,"$RLOG") || &er_("$RLOG","1"); @R = <IN>; close(IN); $flag=0; @N=(); $T=time; $Wri=0; $RCo=""; foreach $R (@R) { ($Na,$Co,$Em,$Time)=split(/<>/,$R); if($Na eq "$name"){$flag=1; $Co++; $R="$Na<>$Co<><>$T<>\n"; $RCo=$Co;} if(($T-$Time) > $RDEL*86400){$R=""; $Wri=1;} push(@N,$R); } if ($flag == 1 || $Wri) { open(OUT,">$RLOG") || &er_("$RLOG","1"); print OUT @N; close(OUT); } if ($flag == 0) { open(OUT,">>$RLOG") || &er_("$RLOG","1"); print OUT "$name<>1<><>$T<>\n"; close(OUT); } if($RCo eq ""){$RCo=1;} if(@RLv){ foreach(0..$#RLv){ $SPL=$RSPL*($_+1); if($_!=$#RLv){if($RCo < $SPL){$R="$RLv[$_]($RCo回)"; last;}} else{$R="$RLv[$_]($RCo回)"; last;} } }else{$R="$RCo回";} } #--------------------------------------------------------------------------------------------------------------------- # [ランク表示] # -> 発言ランキングを表示します(ran_) sub ran_ { @R=(); $Mas=""; open(R,"$RLOG") || &er_("Can't open $RLOG"); while (<R>) { ($Na,$Co,$Em,$Ti)=split(/<>/,$_); if(@d_){ if($FORM{'pass'} ne $pass){&er_("パスワードが違います!");} foreach $D (@d_){if($D eq $Na){$_=""; last;}} if($_ eq ""){next;}else{push(@R,"$_");} } $N=0; if(@NoRank){foreach(0..$#NoRank){if($Na eq "$NoRank[$_]"){$N=1; last;}}} if($N){$Mas.="$Na ->\; $Co回<br>\n"; next;} &time_($Ti); $total+= $Co; $Co{$Na} = $Co; $Date{$Na}=$date; } close(R); if(@R){ open(OUT,">$RLOG") || &er_("Can't write $RLOG"); print OUT @R; close(OUT); } &hed_("Rank"); print <<"_T_"; <center><table width="90\%"><tr bgcolor="$ttb"><th>発言ランキング</th></tr></table></center> <ul>・集計発言数:$total回 <br>・最終発言日から$RDEL日経過すると自動的に削除されます。</ul><center> <form action="$cgi_f" method="$met"><input type="hidden" name="mode" value="ran">$nf$pf <table><tr><td> <table><tr><th colspan=6>BEST 10</th></tr><tr bgcolor="$ttb"> <th>順位</th><th>名前</th><th>発言回数</th><th>最終発言日</th><th>グラフ</th><th>*</th></tr> _T_ $J=0; $rank1=0; $rank2=1; $count_tmp=0; $K=0; foreach (sort { ($Co{$b} <=> $Co{$a}) || ($a cmp $b)} keys(%Co)) { ($Co{$_} == $count_tmp) || ($rank1 = $rank2); $P{$_}=($Co{$_} / $total) * 100; $P{$_}=sprintf("%2.1f",$P{$_}); if($rank1 > 10 && $J==0){ $J=1; print"<tr><td align=\"center\" colspan=6><br><b>11位~$RBEST位</b></td></tr><tr bgcolor=\"$ttb\">\n"; print"<th>順位</th><th>名前</th><th>発言回数</th><th>最終発言日</th><th>グラフ</th><th>*</th></tr>"; } if($J && $rank1 > $RBEST){last;} if($rank1==1){$G=$P{$_};$G{$_}=50;}else{$G{$_}=int(($P{$_}*50)/$G);} print"<tr bgcolor=\"$k_back\"><th>$rank1</th><td><b>$_</b>"; if(@RLv){ $i=0; foreach $RLv (@RLv){ $SPL=$RSPL*($i+1); if($i!=$#RLv){if($Co{$_} < $SPL){print" -($RLv[$i])"; last;}} else{print" -($RLv[$i])"; last;} $i++; } } print"</td><th>$Co{$_}</th><td align=\"center\">$Date{$_}</td><td><small>"; if($RGimg){$G{$_}=$G{$_}*3; print"<img src=\"$RGimg\" width=$G{$_} height=$RGhei>";} else{print "l" x $G{$_};} print" $P{$_}\%</small></td><th><input type=\"checkbox\" name=\"del\" value=\"$_\"></th></tr>\n"; $count_tmp=$Co{$_}; $rank2++; } if($Mas){print"<tr><td colspan=6><br>ちなみに… $Mas</td></tr>\n";} print"</table><br>*マーク削除/Pass<input type=\"password\" name=\"pass\" size=8>\n"; print"<input type=\"submit\" value=\"管理用\"></td><td valign=\"top\">\n"; if(@RLv){ print"<table><tr bgcolor=\"$ttb\"><th>レベル</th><th>発言回数</th></tr>\n"; foreach(0..$#RLv){ $SPL=$RSPL*$_; if($_!=$#RLv){$SPL2="~".($RSPL*($_+1)-1)."回";}else{$SPL2="回以上";} print"<tr align=\"center\" bgcolor=\"$k_back\"><td>$RLv[$_]</td><td>$SPL$SPL2</td></tr>\n"; } print"</table>\n"; } print"</td></tr></table></form></center>\n"; &foot_; } #--------------------------------------------------------------------------------------------------------------------- # [全設定掲示板表示] # -> このCGIで稼動中の掲示板を表示します(all_) sub all_ { print "Content-type: text/html\n\n"; print <<"_HTML_"; <html><head> $STYLE $fsi <!--$ver--> <title>全BBSの最近更新された話題 [All BBS New Subject]</title> <meta http-equiv="Content-type" content="text/html; charset=Shift_JIS"></head> _HTML_ print"<body text=\"$text\" link=\"$link\" vlink=\"$vlink\" bgcolor=\"$bg\""; if($back ne ""){print" background=\"$back\">\n";}elsif($back eq ""){print">\n";} print<<"_HTML_"; <table width="100\%"><tr bgcolor="$ttb"><th>全BBSの最近更新された話題</th></tr></table><br> <ul> <li>I-BOARD/2001 に設定されているBBSの最終更新話題を表\示します。 <li>BBSタイトルをクリックするとその掲示板へ、親記事タイトルをクリックするとその話題へ飛びます。 </ul><center> <table width="95\%" bordercolor="$ttb" border=1><tr bgcolor="$ttb"><th>BBSタイトル</th> <th>最上部の親記事タイトル</th><th>記事数</th><th>更新者</th><th>更新時間</th></tr> _HTML_ foreach (0..$#set){ if($set[$_]){ unless(-e $set[$_]){next;} else{ require "$set[$_]"; $no=$_; @RES=(); $N=0; open(LOG,"$log") || &er_("Can't open $log"); while (<LOG>) { ($namber,$date,$name,$email,$d_may,$comment,$url, $font,$ico,$type,$epasswd,$ip,$sml) = split(/<>/,$_); if($date eq ""){next;} if($type){if($date){unshift(@RES,"$name<>$date<>$type<>");} $N++;} else{if($date){unshift(@RES,"$name<>$date<>$namber<>");} $N++; last;} } close(LOG); if(@RES){($Name,$date,$nam)=split(/<>/,$RES[0]); $MD="namber=$nam&mode=res";} else{$namber="#"; $d_may="記事がありません!"; $date="/"; $MD=""; $Name="/";} } print<<"_TOP_"; <tr bgcolor="$k_back"><th><a href="$cgi_f?no=$no">$title</a></th> <td align="center"><font color="$kijino">[$namber]</font> <a href="$cgi_f?$MD&no=$no"><b>$d_may</b></a></td> <th>$N</th><th>$Name</th><td align="center"><small>$date</small></td> _TOP_ } } print"</table></center>"; &foot_; } #--------------------------------------------------------------------------------------------------------------------- # [ログ生成] # -> ログがない場合生成します(l_m) sub l_m { open(DB,">$_[0]") || &er_("Can't write $_[0]"); print DB ""; close(DB); chmod(0666,"$_[0]"); } #--------------------------------------------------------------------------------------------------------------------- # [マルチレス] # -> マルチレス内容を投稿します(w_m_) sub w_m_ { $C=0; foreach $type (@type) { $comment=$comment[$C]; $d_may=$title[$C]; if($comment){&wri_;} $C++; } } #--------------------------------------------------------------------------------------------------------------------- # [記事デザイン読み込み] # -> 記事デザインを読み込んで表示します(design) sub design { local(@_)=@_; if($design eq ""){ $design=1; $Oya=""; $Res=""; $End=""; local($oya,$res,$end)=0; open(DE,"$DDIR\/$Dfile"); while(<DE>){ if($_=~/\{oya-s\}/){$oya=1; next;} if($_=~/\{res-s\}/){$res=1; $oya=0; next;} if($_=~/\{res-e\}/){$end=1; $res=0; next;} if($_=~/\{oya-e\}/){last;} if($oya==0 && $res==0 && $end==0){next;} if($oya){$Oya.="$_";} if($res){$Res.="$_";} if($end){$End.="$_";} } close(DE); } if($_[0] eq "OYA"){$Html=$Oya;}elsif($_[0] eq "RES"){$Html=$Res;}elsif($_[0] eq "END"){$Html=$End;} #("","\$No","\$Date","\$Name","\$Email","\$Title","$Comment","\$URL","\$Icon","\$FontColor","\$LineColor", # "\$IP","\$ID","\$Select","\$Text","\$Rank","\$TitleColor","\$ResMail","\$BackColor","\$QuoteLink","$ResForm","\$ResLink","\$QuoteURL","\$ResURL","\$ResNo"); $Html=~ s/\$No/$_[1]/ig; $Html=~ s/\$Date/$_[2]/ig; $Html=~ s/\$Name/$_[3]/ig; $Html=~ s/\$TitleColor/$t_font/ig; $Html=~ s/\$Email/$_[4]/ig; $Html=~ s/\$Title/$_[5]/ig; $Html=~ s/\$Comment/$_[6]/ig; $Html=~ s/\$URL/$_[7]/ig; $Html=~ s/\$Icon/$_[8]/ig; $Html=~ s/\$FontColor/$_[9]/ig; if($_[12]){$_[12]="<font color=\"$IDCol\">[ID:$_[12]]</font>";} $Html=~ s/\$LineColor/$_[10]/ig;$Html=~ s/\$IP/$_[11]/ig; $Html=~ s/\$ID/$_[12]/ig; if($_[15] eq "" && $M_Rank){$_[15]="(##)";} $Html=~ s/\$Select/$_[13]/ig; $Html=~ s/\$Text/$_[14]/ig; $Html=~ s/\$Rank/$_[15]/ig; $Html=~ s/\$ResMail/$_[17]/ig; $Html=~ s/\$BackColor/$k_back/ig;$Html=~ s/\$TableLine/$ttb/ig; $Html=~ s/\$QuoteLink/$_[19]/ig;$Html=~ s/\$ResFORM/$_[20]/ig; $Html=~ s/\$ResLink/$_[21]/ig; $Html=~ s/\$QuoteURL/$_[22]/ig; $Html=~ s/\$ResURL/$_[23]/ig; $Html=~ s/\$ResNo/$_[24]/ig; $Html=~ s/\$EditLink/<a href=\"$cgi_f?mode=ed_&mo=nam&namber=$_[1]&no=$no$pp\">編集<\/a>/ig; $Html=~ s/\$EditURL/$cgi_f?mode=ed_&mo=nam&namber=$_[1]&no=$no$pp/ig; $Html=~ s/\$DelLink/<a href=\"$cgi_f?mode=ed_&mo=key&namber=$_[1]&no=$no$pp\">削除<\/a>/ig; $Html=~ s/\$DelURL/$cgi_f?mode=ed_&mo=key&namber=$_[1]&no=$no$pp/ig; print"$Html"; } #--------------------------------------------------------------------------------------------------------------------- # [編集/削除パス入力フォーム] # -> パスワード入力画面を表示します(edit_del) sub edit_del { &hed_("Edit / Delete Key Input"); if($mo eq "nam"){$msg="編集";}elsif($mo eq "key"){$msg="削除";} print<<"_HTML_"; <center><table width="90\%"><tr bgcolor="$ttb"><th>編集/削除キー入力</th></tr> <tr><td align="center">記事No.$namber を $msg します。削除キーを入力してください。 <form action="$cgi_s" method="POST">$nf$pf <input type="hidden" name="del" value="$namber"><input type="hidden" name="mode" value="$mo"> 削除キー/ <input type="password" name="delkey" size=8$ff> <input type=submit value=" 送信 "$fm> </form></td></tr></table></center> _HTML_ &foot_; } #-------------------------------------------------------------------------------------------------------------------- # [携帯端末向け出力] # -> 携帯オプションからの作業命令終了の表示(ktai) # sub ktai { $_[1] =~ tr/+/ /; $_[1] =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $html ="<html><head><title>$_[0]完了</title></head>"; $html.="<body><center>$_[0]完了<br><br><a href=\"$_[1]\">[戻]</a></center></body></html>"; $len = length($html); print "Content-type: text/html\n"; print "Content-length: $len\n"; print "\n"; print "$html"; exit; }