#!/usr/local/bin/perl # ▼=============================================================▼ # --== LINK COLLECTION Ver.2.05 ==-- # --------------------------------------------------------------- # 使用上のご注意 # ★ このソフトはフリーソフトです。 # ★ このソフトの使用による、機器又はデータの破損および損失等に作者は一切の責任を負いません。 # ★ このソフトの商用利用、再配布、著作権表示部分の消去はお断りします。 # ★ 改造・改編は自由です。「素敵な機能を付加された方は、ぜひソースください。」 # ★ 設置・運用等におけるトラブルは、まずは作者又は著作権者のWEBサイトをご覧ください。 # ★ FAQ掲示板及び、電子メールにてできる限りのトラブルに対する応対はしております。 # # ☆ 作者 SHIRO−KAPP # E-mail kappa@ultinet.co.jp # HOME-PAGE http://www.ultinet.co.jp/wmcp/ # このソフトの最終更新日は 99/011/02 です。 # このソフトに使用している、データ、画像などの著作権は、(有)アルティネットにあります。 # ▲=============================================================▲ # ▼=============================▼ # ユーザーごとの変数を定義 (編集可能) # ----------------------------- $TITLETAG = 'DBCJ LINK COLLECTION (DISCUS BREEDERS CLUB OF JAPAN)'; #タイトル(ヘッドタグ内) $TOPTAG = ''; #文字にする場合文字列を記述(例:みんなの掲示板) $BODY = ''; #ボディタグ $BODY_2=''; #管理、登録、修正モード用ボディタグ $STYLE = ''; #スタイルシートを適用する場合(使用方法はlink.cssを見てください。) $COL1="#FF9933"; #メニュー部分のセル背景色 $COL2="#FFFFFF"; #メニュー部分のセル文字色 $LOCK_KEY = 1; #ロック処理の可否( 0=NO , 1=YES ) #シンボリックリンクを許可していないサーバーでは使用不可 $MAX = 10; #1ページ当たりのの最大表示件数 $IMG_DIR = "./img"; #画像格納フォルダ $HOME ="http://discus.powerbean.jp/"; #戻りのURL $SCRIPT = "links.cgi"; #このファイルの名前 $LOGFILE = "link.log"; #記事保存ファイル $K_PASS = 'discus8'; #管理モード移行用パスワード @GENRE_NAME=('全件表示','ディスカスHP(個人)','ディスカスショップ(商用)','ディスカス飼育に役立つHP','水草関係','アクア全般','その他ペット','その他'); @GENRE_IMG=('','sc.gif','cg.gif','midi.gif','etc.gif','air.gif','drive.gif','game.gif','news.gif','serch.gif','sports.gif','food.gif','friend.gif','danger.gif','other.gif'); # ▲=============================▲ (編集ここまで) # ▼=============================▼ # CGIライブラリの呼び出し # ----------------------------- require "./cgi-lib.pl"; require "./jcode.pl"; # ▲=============================▲ # ▼=============================▼ # 連想配列inにデータをセット # ----------------------------- &ReadParse; # ▲=============================▲ # ▼=============================▼ # 連想配列から各変数にデータを格納 # ----------------------------- $NAME = $in{"NAME"}; $NAME =~ s/\"/"/g; $NAME =~ s//>/g; $TITLE = $in{"TITLE"}; $TITLE =~ s/\"/"/g; $TITLE =~ s//>/g; $URL = $in{"URL"}; $URL =~ s/\"/"/g; $URL =~ s//>/g; $COMM = $in{"COMM"}; $COMM =~ s/\"/"/g; $COMM =~ s//>/g; $COMM =~ s/\r\n/
/g; $COMM =~ s/\r|\n/
/g; $PASS = $in{"PASS"}; $PASS =~ s///g; $PASS =~ s/<>/<>/g; $MODE = $in{"MODE"}; $BANGO = $in{"BANGO"}; $SUBMODE=0; $SUBMODE = $in{"SUBMODE"}; $PAGE=0; $PAGE=$in{"PAGE"}; $GENRE=$in{"GENRE"}; $BANNER = $in{"BANNER"}; $LOCK_FILE = "./lit.lock"; $BROWSER = $ENV{'HTTP_USER_AGENT'}; if ($BROWSER =~ /MSIE/i) { $CLASS_1='CLASS="FC"'; $CLASS_2='CLASS="FD"'; } else { $CLASS_1='CLASS=""'; $CLASS_2='CLASS=""'; } # ▲=============================▲ # ▼=============================▼ # 日本語変換 # ----------------------------- &jcode'convert(*COMM,'sjis'); &jcode'convert(*NAME,'sjis'); # ▲=============================▲ # ▼=============================▼ # 時間判別 # ----------------------------- ($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime; $mon++; #曜日を文字に変換 @week = ('SUN','MON','TUE','WED','THU','FRI','SAT'); $wday = $week[$wday]; $mon = sprintf("%.2d",$mon); $mday = sprintf("%.2d",$mday); $hour = sprintf("%.2d",$hour); $min = sprintf("%.2d",$min); $NICHIJI="$year/$mon/$mday ($wday) $hour:$min"; # ▲=============================▲ # ▼=============================▼ # メインルーチン # ----------------------------- if($MODE eq "K_DEL2"){ $SUBMODE="K"; &DELETE; } elsif($MODE eq "TOP"){ &TOP; } elsif($MODE eq "NEW"){ &NEW_ENTRY; } elsif($MODE eq "REV"){ &SHUSEI; } elsif($MODE eq "DEL"){ &SAKUJO; } elsif($MODE eq "FM_UNDER"){ &FM_UNDER; } elsif($MODE eq "TOUROKU"){ &TOUROKU; } elsif($MODE eq "DELETE"){ &DELETE; } elsif($MODE eq "REWRITE"){ &REWRITE; } elsif($MODE eq "REW"){ &REW; } elsif($MODE eq "FM_UP"){ &FM_UP; } elsif($MODE eq "KREW"){ &P_CHECK; $SUBMODE="K"; &SHUSEI; } elsif($MODE eq "KNEW"){ &P_CHECK; $SUBMODE="K"; &NEW_ENTRY; } elsif($MODE eq "KDEL"){ &P_CHECK; $SUBMODE="K"; &K_DEL; } elsif($MODE eq "MAN"){ &MAN; } elsif($MODE eq "IMG"){ &IMG_VIEW; } else{ &FRAME; } # ▲=============================▲ # ▼=============================▼ # エラー処理 # ----------------------------- sub ERROR{ &HEAD_SET; if(-e $LOCK_FILE){ unlink($LOCK_FILE); } print "$BODY\n"; print "

システムエラー発生!

\n"; print "$_[0]


\n"; print "

ブラウザの戻るボタンを押して、再度送信してください。

\n"; print "\n"; exit; } # ▲=============================▲ # ▼=============================▼ # HTMLのヘッダー出力 # ----------------------------- sub HEAD_SET { print "Content-type: text/html\n\n"; print "\n\n"; print "\n"; print "$TITLETAG\n"; } # ▲=============================▲ # ▼=============================▼ # ファイルロック処理 # ----------------------------- sub LOCK{ local($RETRY) = 5; while (!symlink(".", $LOCK_FILE)) { if (--$RETRY <= 0) { &ERROR('LOCK IS BUSY'); } sleep(1); } } # ▲=============================▲ # ▼=============================▼ # フレームセット呼出処理 # ----------------------------- sub FRAME{ &HEAD_SET; print <<"EOH"; <BODY BGCOLOR="#FFFFFF">フレーム対応ブラウザでご覧ください。</BODY> EOH exit; } # ▲=============================▲ # ▼=============================▼ # 上フレーム処理 # ----------------------------- sub FM_UP{ &HEAD_SET; print <<"EOH"; $STYLE $BODY
$TOPTAG
GENRE MENU
EOH exit; } # ▲=============================▲ # ▼=============================▼ # 下フレーム処理 # ----------------------------- sub FM_UNDER{ &READ; @LISTS=(); foreach $LIS (@LIST){ ($LNAME,$LBANNER,$LURL,$LCOMM,$LGENRE,$LPASS,$LNO)=split(/<>/,$LIS); if($GENRE==0 || $GENRE eq ""){ push(@LISTS,$LIS); } elsif($GENRE eq $LGENRE){ push(@LISTS,$LIS); } } $NUM=@LISTS; &HEAD_SET; print <<"EOH"; $STYLE $BODY 登録件数 【 $NUM 】件 EOH $START=$PAGE*$MAX; $FINISH=$START+$MAX; if($FINISH>=$NUM){$FINISH=$NUM;} for($i=$START;$i<$FINISH;$i++){ ($L_NAME,$L_BANNER,$L_URL,$L_COMM,$L_GENRE,$L_PASS,$L_NO)=split(/<>/,$LISTS[$i]); $L_BANNER=""; $L_GENRE=""; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; } if($PAGE==0 && $NUM<=$MAX){ #0ページ目 且つ 最大表示件数より登録件数が少ない print "
BANNER NAME COMMENT GENRE
$L_BANNER$L_NAME$L_COMM$L_GENRE
\n"; &CHOSAKU; } else { #最大表示件数より登録件数が多い print "- SELECT PAGE in this GENRE -\n"; print "
\n"; print "\n"; print "page \n"; print "
\n"; print "\n"; &CHOSAKU; } exit; } # ▲=============================▲ # ▼=============================▼ # 著作権表示部分 (編集不可) # ----------------------------- sub CHOSAKU { print <<"EOH";

- LINK COLLECTION -
byWEB MAKING

EOH exit; } # ▲=============================▲ # ▼=============================▼ # 新規登録画面 # ----------------------------- sub NEW_ENTRY { &HEAD_SET; print <<"EOH"; $STYLE $BODY_2

$TOPTAG
- 新規登録 -

1.バナーのURLを記入し、OKをおしてください。(バナーが無い場合は空白)


バナーは100*35以下の物をご使用ください。 ↑よろしいですか。
2.ホームページのURLを記入してください。


3.ホームページのタイトルを記入してください。


4.簡単なコメントを記入してください。(タグ無効)

5.修正・削除用パスワードを入力してください。(半角英数8文字以内)

6.ジャンルをお選びください。


7.全て記入が終わりましたら、登録ボタンを押してください。


- 戻る -

EOH exit; } # ▲=============================▲ # ▼=============================▼ # 新規登録処理 # ----------------------------- sub TOUROKU { if($COMM eq "") { &ERROR("コメントが入力されていません。"); } if($NAME eq "") { &ERROR("タイトルが入力されていません。"); } if($PASS eq "") { &ERROR("パスワードが入力されていません。"); } if($URL eq "") { &ERROR("URLが入力されていません。"); } if($BANNER eq "") { $BANNER="$IMG_DIR/no.gif"; } if($LOCK_KEY==1){ &LOCK; } open(OUT,"$LOGFILE") || &ERROR("CAN NOT OPEN DATA FILE!!"); eval 'flock(OUT,2);'; @DATA = ; eval 'flock(OUT,8);'; close(OUT); $ID=@DATA-1; ($N,$B,$U,$C,$G,$P,$I)=split(/<>/,$DATA[$ID]); $ID=$I+1; open(IN,">>$LOGFILE"); eval 'flock(OUT,2);'; print IN "$NAME<>$BANNER<>$URL<>$COMM<>$GENRE<>$PASS<>$ID<>\n"; eval 'flock(OUT,8);'; close(IN); if(-e $LOCK_FILE){ unlink($LOCK_FILE); } if($SUBMODE eq "K") { &NEW_ENTRY; } else { &FRAME; } exit; } # ▲=============================▲ # ▼=============================▼ # 修正モード (リスト) # ----------------------------- sub SHUSEI { &READ; &HEAD_SET; print <<"EOH"; $STYLE $BODY

$TOPTAG
- 修正モード -

修正するリンクのパスワードを入力し【修正】ボタンを押してください。

EOH $Q=0; $M_PASS=""; foreach $LIS (@LIST){ ($L_NAME,$L_BANNER,$L_URL,$L_COMM,$L_GENRE,$L_PASS,$L_NO)=split(/<>/,$LIS); if($SUBMODE eq "K"){$M_PASS=$L_PASS} print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; $Q++; } print <<"EOH";
TITLE PASS
$L_NAME

- BACK -

EOH exit; } # ▲=============================▲ # ▼=============================▼ # 削除モード (リスト) # ----------------------------- sub SAKUJO { &READ; &HEAD_SET; print <<"EOH"; $STYLE $BODY

$TOPTAG
- 削除モード -

削除するリンクのパスワードを入力し【削除】ボタンを押してください。

EOH $Q=0; foreach $LIS (@LIST){ ($L_NAME,$L_BANNER,$L_URL,$L_COMM,$L_GENRE,$L_PASS,$L_NO)=split(/<>/,$LIS); print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; $Q++; } print <<"EOH";
TITLE PASS
$L_NAME

- BACK -

EOH exit; } # ▲=============================▲ # ▼=============================▼ # 削除モード (ファイル) # ----------------------------- sub DELETE { if($LOCK_KEY==1){ &LOCK; } open(OUT,"$LOGFILE"); eval 'flock(OUT,2);'; $j=0; %DDATA=(); while () { $DNARABI = $_; ($L_NAME,$L_BANNER,$L_URL,$L_COMM,$L_GENRE,$L_PASS,$L_NO)=split(/<>/,$DNARABI); if ($BANGO eq $L_NO) { &PAS_CHECK; } else { $DDATA[$j]=$_ ;$j++; } } eval 'flock(OUT,8);'; close(OUT); open(IN,">$LOGFILE"); eval 'flock(OUT,2);'; print IN @DDATA; eval 'flock(OUT,8);'; close(IN); if(-e $LOCK_FILE){ unlink($LOCK_FILE); } if($SUBMODE eq "K") { &K_DEL; } else { &FRAME; } exit; } # ▲=============================▲ # ▼=============================▼ # パスワードチェック # ----------------------------- sub PAS_CHECK { if($PASS ne $L_PASS){ &ERROR("パスワードが違います。"); } } # ▲=============================▲ # ▼=============================▼ # ファィル読み取り # ----------------------------- sub READ { if($LOCK_KEY==1){ &LOCK; } open(OUT,"$LOGFILE"); eval 'flock(OUT,2);'; @LIST = ; eval 'flock(OUT,8);'; close(OUT); if(-e $LOCK_FILE){ unlink($LOCK_FILE); } } # ▲=============================▲ # ▼=============================▼ # 修正モード (編集) # ----------------------------- sub REWRITE { &READ; foreach $LIS (@LIST){ ($LNAME,$LBANNER,$LURL,$LCOMM,$LGENRE,$L_PASS,$LNO)=split(/<>/,$LIS); if($BANGO eq $LNO){ &PAS_CHECK; $NAME=$LNAME; $BANNER=$LBANNER; $URL=$LURL; $COMM=$LCOMM; $GENRE=$LGENRE; $PASS=$L_PASS; $NO=$LNO; } } &HEAD_SET; print <<"EOH"; $STYLE $BODY_2

$TOPTAG
- 修正登録 -

1.バナーのURLを記入し、OKをおしてください。(バナーが無い場合は空白)


バナーは100*35以下の物をご使用ください。 ↑よろしいですか。
2.ホームページのURLを記入してください。


3.ホームページのタイトルを記入してください。


4.簡単なコメントを記入してください。(タグ無効)

5.修正・削除用パスワードを入力してください。(半角英数8文字以内)

6.ジャンルをお選びください。


7.全て記入が終わりましたら、登録ボタンを押してください。


- 戻る -

EOH exit; } # ▲=============================▲ # ▼=============================▼ # 修正モード (ファイル) # ----------------------------- sub REW { if($COMM eq "") { &ERROR("コメントが入力されていません。"); } if($NAME eq "") { &ERROR("タイトルが入力されていません。"); } if($PASS eq "") { &ERROR("パスワードが入力されていません。"); } if($URL eq "") { &ERROR("URLが入力されていません。"); } if($BANNER eq "") { $BANNER="$IMG_DIR/no.gif"; } if($LOCK_KEY==1){ &LOCK; } open(OUT,"$LOGFILE"); flock(OUT,2); @RNARABI=; flock(OUT,8); close(OUT); @RDATA=(); foreach $RRR (@RNARABI){ ($LNAME,$LBANNER,$LURL,$LCOMM,$LGENRE,$L_PASS,$LNO)=split(/<>/,$RRR); if ($BANGO == $LNO) { &PAS_CHECK; $RRR="$NAME<>$BANNER<>$URL<>$COMM<>$GENRE<>$PASS<>$BANGO<>\n"; } push(@RDATA,$RRR); } open(IN,">$LOGFILE"); flock(IN,2); print IN @RDATA; flock(IN,8); close(IN); if(-e $LOCK_FILE){ unlink($LOCK_FILE); } if($SUBMODE eq "K") { &SHUSEI; } else { &FRAME; } exit; } # ▲=============================▲ # ▼=============================▼ # 管理モード (移行用) # ----------------------------- sub MAN { &HEAD_SET; print <<"EOH"; $STYLE $BODY_2
管理モード移行用
新規登録  修正モード  削除モード 
PASS-WORD 

- BACK -

EOH exit; } # ▲=============================▲ # ▼=============================▼ # 管理削除モード (リスト) # ----------------------------- sub K_DEL { &READ; &HEAD_SET; print <<"EOH"; $STYLE $BODY

$TOPTAG
- 削除モード -

EOH $Q=0; foreach(0 .. $#LIST){ ($L_NAME,$L_BANNER,$L_URL,$L_COMM,$L_GENRE,$L_PASS,$L_NO)=split(/<>/,$LIST[$_]); print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; $Q++; } print <<"EOH";
TITLE
$L_NAME

- BACK -

EOH exit; } # ▲=============================▲ # ▼=============================▼ # ホームに戻る # ----------------------------- sub TOP { print "Location: $HOME\n\n"; exit; } # ▲=============================▲ # ▼=============================▼ # ジャンル画像一覧表示処理 # ----------------------------- sub IMG_VIEW { &HEAD_SET; print <<"EOH"; $STYLE $BODY_2 EOH foreach(1 .. $#GENRE_NAME){ print "\n"; print "\n"; print "\n"; } print <<"EOH";
IMAGE GENRE
$GENRE_NAME[$_]

- BACK -

EOH exit; } # ▲=============================▲ # ▼=============================▼ # 管理モードパスワードチェック # ----------------------------- sub P_CHECK { if($PASS ne $K_PASS){ &ERROR('PASS-WORD ERROR!!'); } } # ▲=============================▲