#!/usr/local/bin/perl #┌───────────────────────────────── #│ YY-BOARD v5.3 (2003/11/08) #│ Copyright (c) KentWeb #│ webmaster@kent-web.com #│ http://www.kent-web.com/ #└───────────────────────────────── # YY-BOARD v5.3用携帯電話対応スクリプト # 2004/02/04 湯一路 http://www.url-battle.com/cgi/ # 外部ファイル取込 require './jcode.pl'; require './keitai.cgi'; require './yyini.cgi'; # メイン処理 &decode; &axsCheck; $sortnew = ($mode eq "sort"); $preview = ($mode eq "preview"); $msgview = ($mode eq "msgview"); if ($mode eq "imode") { &imode_write; } elsif ($mode eq "howto") { &howto; } elsif ($mode eq "find") { &find; } elsif ($mode eq "res") { &resForm; } elsif ($mode eq "image") { ℑ } elsif ($mode eq "check") { ✓ } elsif ($mode eq "idel") { &imode_del; } elsif ($mode eq "iadmin") { &imode_admin; } elsif ($mode eq "mobile_mail") { &mobile_mail; } elsif ($mode eq "mobile_sendmail") { &mobile_sendmail; } elsif ($mode eq "sendmail") { &send_mail; } if ($imode && $imode_out && !$sortnew && !$preview && !$msgview) {$preview = 1;} if ($sortnew || $preview) {$p_log = $new_log;$pageView = $p_log;} if(!$imode_out && $imode && !$sortnew && !$preview){$pageView = $imodenum;} &logView; #--------------# # 記事表示部 # #--------------# sub logView { local($next,$back,$i,$flag); # クッキー取得 local($cnam,$ceml,$curl,$cpwd,$cico,$ccol) = &get_cookie; $curl ||= 'http://'; # ヘッダを出力 if ($ImageView == 1) { &header('ImageUp'); } else { &header; } # カウンタ処理 if ($counter) { &counter; } if (!$imode){ # タイトル部 print "
\n"; if ($banner1 ne "") { print "$banner1

\n"; } if ($t_img eq '') { print "$title\n"; } else { print "\"$title\"\n"; } print "$imode_msg\n"; print < [トップに戻る]\ [留意事項] [ワード検索] EOM # 過去ログのリンク部を表示 if ($pastkey) { print "[過去ログ]\n"; } # 掲示板アドレスメール送信機能を表示 if ($send_mail) { print "[携帯に掲示板アドレスを送信]\n"; } print <管理用]


EOM &form($cnam,$ceml,$curl,$cpwd,$cico,$ccol,'',''); print <

EOM }else{ if ($title_gif eq '') { print "$title
\n"; }else{ print "
\n"; } print ""; if (!$preview){ print "/一覧"; } if ($ihomepage eq ""){ }else{ print "/"; } if ($newok){ if ($preview && !$imode_out){ print "//"; }elsif(!$sortnew){ print "/"; }else{ print "/"; } } if ($imode_del){ print "/"; } if ($imode_admin){ print "/"; } } #新着順ソートルーチン if ($sortnew){ # 記事を展開 open(IN,"$logfile") || &error("Open Error : $logfile"); @logdata = ; close(IN); $temp = shift(@logdata); #投稿Noでソート @tmp = map {(split /,/)[0]} @logdata; @logdata = @logdata[sort {$tmp[$b] <=> $tmp[$a]} 0 .. $#tmp]; foreach $log (@logdata) { local($no,$re,$dat,$nam,$eml,$sub,$com,$url,$hos,$pw,$col,$ico) = split(/<>/,$log); $i++; if ($i < $page + 1) { next; } if ($i > $page + $pageView) { next; } #imode用 if ($eml && $mailview) { $nam = "$nam"; } #時間変換 &time_change; print "
[$no]【$sub】
\n"; if (!$re) { print "TO:$nam
$dat
\n"; if ($urlview && $url){print "[HOME]
\n";} print "[返信]  
"; } else { print "→TO:$nam
$dat
\n"; if ($urlview && $url){print "[HOME]
\n";} print "[返信]  
"; } print "$com\n"; } }elsif($msgview){ # 記事を展開 open(IN,"$logfile") || &error("Open Error : $logfile"); $top = ; while () { local($no,$re,$dat,$nam,$eml,$sub,$com,$url,$hos,$pw,$col,$ico) = split(/<>/); if ($in{'no'} eq "$no" || $in{'no'} eq "$re") { #時間変換 &time_change; if ($eml && $mailview) { $nam = "$nam"; } if (!$re) { print "
[$no]【$sub】
\n"; print "TO:$nam
$dat
\n"; if ($urlview && $url){print "[HOME]
\n";} print "[返信]  
"; }else{ print "
[$no]【$sub】
\n"; print "→TO:$nam
$dat
\n"; if ($urlview && $url){print "[HOME]
\n";} # print "[返信]  
"; } print "$com\n"; #last; } } print "
[返信]  
"; if ($urlview && $url){print "[HOME]
\n";} print "[一覧へ戻る]\n"; close(IN); }else{ # 記事を展開 $i=0; $flag=0; open(IN,"$logfile") || &error("Open Error: $logfile"); $top = ; while () { local($no,$re,$dat,$nam,$eml,$sub,$com,$url,$hos,$pw,$col,$ico) = split(/<>/); if ($re eq "") { #レスの数を計算して表示 if ($preview && $i >= $page && $i <= $page + $pageView){ if ($rcount > 0){ print "($rcount)\n"; } if ($i){ print "
\n"; }else{ print "
\n"; } } $i++; } if ($i < $page + 1) { next; } if ($i > $page + $pageView) { next; } if ($imode == 0){ # 題名の長さ if (length($sub) > $sub_len*2) { $sub = substr($sub,0,$sub_len*2); $sub .= "..."; } if ($eml) { $nam = "$nam"; } if ($home_icon && $url) { $url = "HomePage"; } elsif (!$home_icon && $url) { $url = "<Home>"; } if (!$iconMode) { $com = "
$com
"; } if (!$re && $flag) { print "

\n"; $flag=1; } if (!$re) { print "
\n"; $flag=1; } if ($re) { print "
\n"; } print "\n"; if ($re) { print ""; } print ""; print "\n"; } else { print "
\n"; } print "

$sub "; if (!$re) { print "投稿者:$nam 投稿日:$dat "; } else { print "$nam - $dat "; } print "No\.$no   $url \n"; if (!$re) { print "\n"; print "\n"; print "\n"; print "
\n"; if ($re) { print "\n"; } # アイコンモード if ($iconMode) { print ""; } print "

\"$ico\"$com
\n"; }else{ if (!$re && $flag) { $flag=1; } if (!$re) { $flag=1; } #時間変換 &time_change; if (!$preview){ if ($eml && $mailview) { $nam = "$nam"; } if (!$re) { print "
[$no]【$sub】
\n"; print "TO:$nam
$dat
\n"; if ($urlview && $url){print "[HOME]
\n";} print "[返信]  
"; } else { print "
[$no]【$sub】
\n"; print "→TO:$nam
$dat
\n"; if ($urlview && $url){print "[HOME]
\n";} } print "$com\n"; }else{ #一覧表示 投稿番号下3桁+タイトル全角9文字+/+名前1文字 if (length($sub) > 18){$sub = substr($sub,0,18);} if (length($nam) > 6){$nam = substr($nam,0,6);} #$sub = byte_check($sub); #全角が分断されていないかチェック #$name = byte_check($name); $temp = sprintf("%-8s..%-4s", $sub, $nam); $tempno = $no; if (length($tempno) > 3){$name = substr($tempno,0,3)} $tempno = sprintf("%-3d", $tempno); if (!$re) { print "$tempno$temp\n"; $rcount = 0; }else{ $rcount++; } } } } close(IN); #レスの数を計算して表示(末尾用) if ($preview && $i >= $page && $i <= $page + $pageView){ if ($rcount > 0){ print "($rcount)
\n"; } } if (!$imode){print "
\n";} } if (!$imode){ # ページ移動ボタン表示 if ($page - $pageView >= 0 || $page + $pageView < $i) { print "

\n"; &mvbtn("$script?page=", $i, $pageView); print "
\n"; } }else{ # ページ移動ボタン表示 if ($page - $pageView >= 0 || $page + $pageView < $i) { print "


\n"; if ($sortnew) { &mvbtn("$script?mode=sort&page=", $i, $pageView); } else { &mvbtn("$script?page=", $i, $pageView); } } } if (!$imode){ # 著作権表示(削除不可): 但し、MakiMakiさんの画像を使用しない場合に限り、 # MakiMakiさんのリンクを外すことは可能です。 print < NO: PASS: $banner2

- KENT & MakiMaki -
携帯用改造:湯一路

EOM }else{ print <オリジナル:KENT
携帯用改造:湯一路 EOM } print < EOM exit; } #----------------# # 返信フォーム # #----------------# sub resForm { local($f,$no,$reno,$dat,$nam,$eml,$sub,$com,$url,$tmpnum); # ログを読み込み open(IN,"$logfile") || &error("Open Error : $logfile"); $top = ; while () { ($no,$re,$dat,$nam,$eml,$sub,$com,$url,$hos,$pw,$col,$ico) = split(/<>/); if ($in{'no'} eq "$re") { $tmpnum++; }elsif($tmpnum){break;} } close(IN); if (($tmpnum >= $maxth) && $maxth){ &error("返信が$maxth件になったため、これ以上スレッドが立てられません。新たにスレッドを立ててください"); } # クッキーを取得 local($cnam,$ceml,$curl,$cpwd,$cico,$ccol) = &get_cookie; $curl ||= 'http://'; # ログを読み込み $f=0; open(IN,"$logfile") || &error("Open Error: $logfile"); $top = ; # ヘッダを出力 if ($ImageView == 1) { &header('ImageUp'); } else { &header; } # 関連記事出力 print < ▽以下は記事NO. $in{'no'} に関する返信フォームです。
EOM while () { ($no,$reno,$dat,$nam,$eml,$sub,$com,$url) = split(/<>/); if ($in{'no'} == $no && $reno) { $f++; } if ($in{'no'} == $no || $in{'no'} == $reno) { if (length($sub) > $sub_len*2) { $sub = substr($sub,0,$sub_len*2-4); $sub .= "..."; } if ($in{'no'} == $no) { $resub = $sub; } if ($url) { $url = "<Home>"; } if ($reno) { print '  '; } print "$sub 投稿者:$nam 投稿日:$dat $url No\.$no
$com

\n"; } } close(IN); if ($f) { &error("不正な返信要求です"); } # タイトル名 if ($resub !~ /^Re\:/) { $resub = "Re: $resub"; } print <<"EOM";
EOM &form($cnam,$ceml,$curl,$cpwd,$cico,$ccol,$resub,''); print <
EOM exit; } #------------# # 留意事項 # #------------# sub howto { &header; print <<"EOM";

留意事項

  1. この掲示板はクッキー対応です。1度記事を投稿いただくと、お名前、Eメール、参照先、暗証キーの情報は2回目以降は自動入力されます。(ただし利用者のブラウザがクッキー対応の場合)
  2. 投稿内容には、タグは一切使用できません。
  3. 記事を投稿する上での必須入力項目は「お名前」「メッセージ」です。Eメール、参照先、題名、暗証キーは任意です。
  4. 記事には、半角カナは一切使用しないで下さい。文字化けの原因となります。
  5. 記事の投稿時に「暗証キー」に任意のパスワード(英数字で8文字以内)を入れておくと、その記事は次回暗証キーによって修正及び削除することができます。
  6. 記事の保持件数は最大$max件です。それを超えると古い順に自動削除されます。
  7. 既存の記事に「返信」をすることができます。各記事の上部にある「返信」ボタンを押すと返信用フォームが現れます。
  8. 過去の投稿記事から「キーワード」によって簡易検索ができます。トップメニューの「ワード検索」のリンクをクリックすると検索モードとなります。
  9. 管理者が著しく不利益と判断する記事や他人を誹謗中傷する記事は予\告なく削除することがあります。

EOM exit; } #--------------# # ワード検索 # #--------------# sub find { &header; print <
  • キーワードを入力し、「条件」「表\示」を選択して検索ボタンを押して下さい。
  • キーワードはスペースで区切って複数指定することができます。

    キーワード 条件 表\示
EOM # 検索実行 if ($in{'word'} ne "") { ($i,$next,$back) = &search($logfile,$in{'word'},$in{'view'},$in{'cond'}); $enwd = &url_enc($in{'word'}); if ($back >= 0) { print "[前の$in{'view'}件]\n"; } if ($next < $i) { print "[次の$in{'view'}件]\n"; } } print "\n"; exit; } #----------------# # カウンタ処理 # #----------------# sub counter { local($count,$cntup,@count); # 閲覧時のみカウントアップ if ($mode eq '') { $cntup=1; } else { $cntup=0; } # カウントファイルを読みこみ open(IN,"$cntfile") || &error("Open Error: $cntfile"); eval "flock(IN, 1);"; $count = ; close(IN); # IPチェックとログ破損チェック local($cnt, $ip) = split(/:/, $count); if ($addr eq $ip || $cnt eq "") { $cntup=0; } # カウントアップ if ($cntup) { $cnt++; open(OUT,"+< $cntfile") || &error("Write Error: $cntfile"); eval "flock(OUT, 2);"; truncate(OUT, 0); seek(OUT, 0, 0); print OUT "$cnt\:$addr"; close(OUT); } # 桁数調整 while(length($cnt) < $mini_fig) { $cnt = '0' . $cnt; } @count = split(//, $cnt); if($imode){ print "$cnt
\n"; }else{ # GIFカウンタ表示 if ($counter == 2) { foreach (0 .. $#count) { print "\"$count[$_]\""; } # テキストカウンタ表示 } else { print "$cnt
\n"; } } } #--------------------# # 画像イメージ表示 # #--------------------# sub image { local($i,$j,$stop); &header; print <

画像イメージ

EOM @ico1 = split(/\s+/, $ico1); @ico2 = split(/\s+/, $ico2); $i=0; $j=0; $stop = @ico1; foreach (0 .. $#ico1) { $i++; $j++; print "\n"; if ($j != $stop && $i >= 5) { print "\n"; $i=0; } elsif ($j == $stop) { if ($i == 0) { last; } while ($i < 5) { print ""; $i++; } } } print <
\"$ico1[$_]\" $ico2[$_]


EOM exit; } #------------------# # チェックモード # #------------------# sub check { &header; print <Check Mode
    EOM # ログパス if (-e $logfile) { print "
  • ログファイルのパス:OK\n"; } else { print "
  • ログファイルのパス:NG → $logfile\n"; } # ログパーミッション if (-r $logfile && -w $logfile) { print "
  • ログファイルのパーミッション:OK\n"; } else { print "
  • ログファイルのパーミッション:NG\n"; } # カウンタログ print "
  • カウンタ:"; if ($counter) { print "設定あり\n"; if (-e $cntfile) { print "
  • カウンタログファイルのパス:OK\n"; } else { print "
  • カウンタログファイルのパス:NG → $cntfile\n"; } } else { print "設定なし\n"; } # ロックディレクトリ print "
  • ロック形式:"; if ($lockkey == 0) { print "ロック設定なし\n"; } else { if ($lockkey == 1) { print "symlink\n"; } else { print "mkdir\n"; } ($lockdir) = $lockfile =~ /(.*)[\\\/].*$/; print "
  • ロックディレクトリ:$lockdir\n"; if (-d $lockdir) { print "
  • ロックディレクトリのパス:OK\n"; } else { print "
  • ロックディレクトリのパス:NG → $lockdir\n"; } if (-r $lockdir && -w $lockdir && -x $lockdir) { print "
  • ロックディレクトリのパーミッション:OK\n"; } else { print "
  • ロックディレクトリのパーミッション:NG → $lockdir\n"; } } # 過去ログ print "
  • 過去ログ:"; if ($pastkey == 0) { print "設定なし\n"; } else { print "設定あり\n"; # NOファイル if (-e $nofile) { print "
  • NOファイルパス:OK\n"; } else { print "
  • NOファイルのパス:NG → $nofile\n"; } if (-r $nofile && -w $nofile) { print "
  • NOファイルパーミッション:OK\n"; } else { print "
  • NOファイルパーミッション:NG → $nofile\n"; } # ディレクトリ if (-d $pastdir) { print "
  • 過去ログディレクトリパス:OK\n"; } else { print "
  • 過去ログディレクトリのパス:NG → $pastdir\n"; } if (-r $pastdir && -w $pastdir && -x $pastdir) { print "
  • 過去ログディレクトリパーミッション:OK\n"; } else { print "
  • 過去ログディレクトリパーミッション:NG → $pastdir\n"; } } print < EOM exit; } __END__