#!/usr/bin/perl ### 【ここからヘッダ】 #################################################### # # 著作権の告知 # What's New (new.cgi) # Copyright (c) 1998 To-chat Script Factory. All Rights Reserved. # Maintained by Tanaka Hiroyuki # $script_url = "\"http://www2m.biglobe.ne.jp/~To-chat/script/index.cgi\""; $script_v = ""; # # このスクリプトはフリースクリプトです。この著作権の告知に手を加えない限り、 # new.cgi を使用し改変することができます。 # # 当スクリプトを使用することにより、使用者は To-chat Script Factory に対し、 # 使用によって生じる可能性のあるいかなる責務に関しても免責を保証したものと # します。 # # 事前の書面による同意を得ることなしに当スクリプトのコードを販売することは、 # 禁止します。 # # 当方の許可無く、当スクリプト、もしくは当スクリプトをカスタマイズしたもの # を再配布することは堅く禁じます。再配布を希望される場合は、必ず事前に許可 # を得てください。 # # いかなる場合も、著作権表示およびヘッダに手を加えることは禁止します。 # ################################################## 【ヘッダはここまで】 ### ### 【ここから設定】 ##################################################### # # 必要に応じて以下の項目の設定を変更して下さい。 # クオーテーションマーク(')は必要なものですので削除しないで下さい。 # 管理用パスワード(必ず変更) $password = '2122n'; # CGIファイル $cgi_url = './new.cgi'; # ログファイル $file = './log.dat'; # 設定ファイル $room = './r.dat'; # postが使えないサーバーはgetに変更。 $method = 'post'; # 海外サーバー利用時、時差がある場合は以下を設定する。 # たとえば表示時刻に3時間の遅れがある場合は、$HourOffset = '+3'; と変更する。 $HourOffset = '0'; ################################################## 【 設定はここまで 】##### $menten = "



神奈川県足柄下郡箱根町元箱根160-34
〒250-0552 電話 0460-4-6576

"; ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time+($HourOffset*3600)); $month1 = ($mon + 1); $date_now = sprintf("%02d/%02d/%02d",$year,$month1,$mday); $time2= time; if (!open(FILE,"$file")) { &openchat1;}close(FILE); if (!open(ROOM,"$room")) { &openchat2;} close(ROOM); require './jcode.pl'; require "$room"; if ($ENV{'REQUEST_METHOD'} eq "POST") { 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'); $value =~ s/ , / , /g; $value =~ s/\n//g; $FORM{$name} = $value; } $mente = "$menten"; if($max eq ""){$max = "100";} if($titlecolor eq ""){$titlecolor = $txtcolor;} $top = "$script_v "; if($z1color) { $z1 = "bgcolor\=\"$z1color\""; } else {$z1 = '';} ### 分岐 ### if ($buffer eq "" ) { &disp; } else { if ($FORM{'action'} eq "regist") { ®ist; } elsif ($FORM{'action'} eq "regist2") { ®ist2; } elsif ($FORM{'action'} eq "mente") { &mente; } elsif ($FORM{'action'} eq "admin") { &admin; } elsif ($FORM{'action'} eq "admin2") { &admin2; } elsif ($FORM{'action'} eq "change") { &change; } elsif ($FORM{'action'} eq "change2"){ if ($FORM{'change'}) { &change2; } elsif ($FORM{'delete'}) { &delete; } } elsif ($FORM{'action'} eq "change3") { &change3; } else { &disp; } } ### 表示作業 ### sub disp { &title; print "$head
\n"; print "
$rinji
\n"; if (!open(IN,"$file")) { $errorcode = "1"; &error; } @DATA = ; close(IN); if ($FORM{'top'}) { $next = 0; } else { if ($FORM{'next'} eq "") { $next = 0; } else { $next = $FORM{'next'}; }} $accesses = @DATA; @DATA = reverse(@DATA); @DATA2 = splice(@DATA,$next,$limit); $next2 = ($next + $limit); foreach $data (@DATA2) { if ($data =~ /(.*) \, (.*) \, (.*) \, (.*)/) { $date = $1; $name = $2; $com = $3; $new = $4; } else { next; } print "
\n"; print "\n"; print "
  $date\

\n"; if($name) { print "
    $name
\n"; } print "
    $com
\n"; print "
\n\n"; } if($next2 < $accesses){ print "
\n"; print "\n"; if($next ne "0"){ print "\n"; } print "\n"; print "
\n"; } elsif($next ne "0") { print "
\n"; print "\n"; print "\n"; print "
\n"; } print "
\n"; print "

$mente\n"; print "$touroku\n"; print "

$top\n"; exit; } ### 認証画面 ### sub mente { &title; &mentelog; } ### 認証画面2 ### sub remente { &title; print "パスワードが正しくありません。もう一度お確かめ下さい。
\n"; &mentelog; exit; } ### 認証画面3 ### sub mentelog { if($FORM{'action'} eq "regist") { $mente1 = '


●●● 管理用メニュー ●●●

メニュー 
パスワード 

  • メニューから行う作業を選択して下さい。。
  • パスワード欄に管理用パスワードを記入して下さい。
_MENTELOG_ } ### 設定フォーム ### sub admin { if ($FORM{'pass'} ne $password) { &remente; } &title; print <<"_ADMIN1_";
●●● 基本設定 ●●●

タイトル 
ログの保存数 
表\示数/頁 

  • タイトル欄にはタイトルをご記入下さい。
  • ログの保存数欄に履歴情報を何件まで保存させるか記入して下さい。
  • 表\示数/頁欄に1ページあたりの表\示数を記入して下さい。
  • HomePage欄にホームページのURLをhttp://〜の形で記入して下さい。


●●● 更新履歴の色設定 ●●●

BGCLOOR  背景色の指定
TEXTCOLOR  文字色の指定
LINKCOLOR  リンク色の指定
ALINKCOLOR  リンクをクリックしたときの色の指定
VLINKCOLOR  行ったことのあるリンク色の指定
DATE_COLOR  日付のバックのカラー

  • 背景・文字色は#000000〜#ffffffの # + 半角英数字6字の形(色コード・16進数)で指定します。


●●● オプション ●●●

背景の画像

  • 壁紙を張る場合は、画像の場所(URL)をhttp://〜の形で背景の画像欄に記入して下さい。


●●● ヘッダスペース ●●●

ヘッダ

  • ここに記入された内容は、ヘッダ部分に表\示されます。タイトル表\示などにお使い下さい。
  • この欄はHTMLのタグが使えます。HTMLの文法に則ってお書き下さい。


●●● 臨時連絡用スペース ●●●

臨時連絡

  • ここに記入された内容は、ヘッダの下に表\示されます。常に一番上に表\示しておきたい臨時連絡用途などにお使い下さい。
  • この欄はHTMLのタグが使えます。HTMLの文法に則ってお書き下さい。

_ADMIN1_ } ### 設定作業 ### sub admin2 { $title=$FORM{'cgte'}; unless ($title) { $errorcode = "4"; &quit; } if ($title =~ /$room") || die "error"; $mentecc01 = "\$bd = \'$bd\'"; $mentecc01 =~ s/\012//gi; $mentecc02 = "\$title=\'$title\'"; $mentecc02 =~ s/\012//gi; $mentecc03 = "\$color=\'$color\'"; $mentecc03 =~ s/\012//gi; $mentecc04 = "\$txtcolor=\'$txtcolor\'"; $mentecc04 =~ s/\012//gi; $mentecc05 = "\$linkcolor=\'$linkcolor\'"; $mentecc05 =~ s/\012//gi; $mentecc06 = "\$vlinkcolor=\'$vlinkcolor\'"; $mentecc06 =~ s/\012//gi; $mentecc07 = "\$alinkcolor=\'$alinkcolor\'"; $mentecc07 =~ s/\012//gi; $mentecc20 = "\$max=\'$cgmax\'"; $mentecc20 =~ s/\012//gi; $mentecc21 = "\$limit=\'$cglimit\'"; $mentecc21 =~ s/\012//gi; $mentecc22 = "\$z1color=\'$z1color\'"; $mentecc22 =~ s/\012//gi; $mentecc23 = "\$head=\'$head\'"; $mentecc24 = "\$rinji=\'$rinji\'"; print DATA "$mentecc01\;\n"; print DATA "$mentecc02\;\n"; print DATA "$mentecc03\;\n"; print DATA "$mentecc04\;\n"; print DATA "$mentecc05\;\n"; print DATA "$mentecc06\;\n"; print DATA "$mentecc07\;\n"; print DATA "$mentecc20\;\n"; print DATA "$mentecc21\;\n"; print DATA "$mentecc22\;\n"; print DATA "$mentecc23\;\n"; print DATA "$mentecc24\;\n"; print DATA "1\;\n"; close(DATA); print "Content-type: text/html\n\n"; print "$title \n"; print "\n"; print "\n"; print " 変更しました。\n"; exit; } ### 登録フォーム ### sub regist { if ($FORM{'pass'} ne $password) { &remente; } &title; print <<"_REGIST_";
●●● 登録内容 ●●●

日付 
題名 
内容 
 
_REGIST_ } ### 登録作業 ### sub regist2 { $rireki_date=$FORM{'rireki_date'}; $rireki_date =~ s/ //g; $rireki_date =~ s/ //g; if ($rireki_date eq "") { $errorcode = "1"; &quit; } $rireki_title=$FORM{'rireki_title'}; $comment =$FORM{'comment'}; $comment =~ s/\015\012/\012/g; $comment =~ s/\015/\012/g; $comment =~ s/\012/
/g; if ($comment eq "") { $errorcode = "3"; &quit; } if (!open(DB,"$file")) { $errorcode = "1"; &error; } @lines = ; close(DB); @TESTLOG = reverse(@lines); @TESTLOG2 = splice(@TESTLOG,0,2); foreach $line (@TESTLOG2) { if ($line =~ /(.*) , (.*) , (.*) , (.*)/) { $test_title = $2; $test_com = $3; if ($test_title eq $FORM{'rireki_title'} && $test_com eq $comment) { &disp; } }} $axs = @lines; if ($axs >= $max) { shift(@lines); } push(@lines,"$FORM{'rireki_date'} \, $FORM{'rireki_title'} \, $comment \, $time2\n"); if (!open(DB,">$file")) { $errorcode = "1"; &error; } print DB @lines; close(DB); &disp; } ### 変更・削除画面 ### sub change { if ($FORM{'pass'} ne $password) { &remente; } &title; print "$head
\n"; print "▼ 通常画面に戻る

\n"; if (!open(IN,"$file")) { $errorcode = "1"; &error; } @DATA = ; close(IN); if ($FORM{'top'}) { $next = 0; } else { if ($FORM{'next'} eq "") { $next = 0; } else { $next = $FORM{'next'}; }} $accesses = @DATA; @DATA = reverse(@DATA); @DATA2 = splice(@DATA,$next,$limit); $next2 = ($next + $limit); foreach $data (@DATA2) { if ($data =~ /(.*) \, (.*) \, (.*) \, (.*)/) { $date = $1; $name = $2; $com = $3; $new = $4; } else { next; } print "
\n"; print "\n"; print "\n"; print "\n"; print "
  $date\

\n"; if($name) { print "
    $name
\n"; } print "
    $com
\n"; print "
\n\n"; print "\n\n"; print "\n"; print "\n"; print "\n"; print "
\n"; } if($next2 < $accesses){ print "
\n"; print "\n"; print "\n"; print "\n"; if($next ne "0"){ print "\n"; } print "\n"; print "
\n"; } elsif($next ne "0") { print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; } print "
\n"; print "

$top\n"; exit; } ### 変更フォーム ### sub change2 { if ($FORM{'pass'} ne $password) { &remente; } if ($FORM{'next'} eq "") { $next = 0; } else { $next = $FORM{'next'}; } &title; print "$head


\n"; if (!open(IN,"$file")) { $errorcode = "1"; &error; } @DATA = ; close(IN); @DATA = reverse(@DATA); foreach $data (@DATA) { if ($data =~ /(.*) \, (.*) \, (.*) \, (.*)/) { $date = $1; $name = $2; $com = $3; $new = $4; } else { next; } if($FORM{'chenge_point'} eq $new) { print <<"_REGIST_";
●●● 内容変更 ●●●

日付 
題名 
内容 
 
_REGIST_ } } print "

$top\n"; exit; } ### 変更作業 ### sub change3 { if ($FORM{'pass'} ne $password) { &remente; } if ($FORM{'next'} eq "") { $next = 0; } else { $next = $FORM{'next'}; } $rireki_date=$FORM{'rireki_date'}; $rireki_date =~ s/ //g; $rireki_date =~ s/ //g; if ($rireki_date eq "") { $errorcode = "1"; &quit; } $rireki_title=$FORM{'rireki_title'}; $comment =$FORM{'comment'}; $comment =~ s/\015\012/\012/g; $comment =~ s/\015/\012/g; $comment =~ s/\012/
/g; if ($comment eq "") { $errorcode = "3"; &quit; } if (!open(DB,"$file")) { $errorcode = "1"; &error; } @lines = ; close(DB); foreach $line (@lines) { if ($line =~ /(.*) , (.*) , (.*) , (.*)/) { $date = $1; $name = $2; $com = $3; $new = $4; $user = "$date , $name , $com , $new\n"; if ($FORM{'chenge_point'} eq $new) { push(@New,"$FORM{'rireki_date'} \, $FORM{'rireki_title'} \, $comment \, $time2\n"); } else { push(@New,$user); } } } if (!open(DB,">$file")) { $errorcode = "1"; &error; } print DB @New; close(DB); &change; } ### 削除作業 ### sub delete { if ($FORM{'pass'} ne $password) { &remente; } if ($FORM{'next'} eq "") { $next = 0; } else { $next = $FORM{'next'}; } if (!open(DB,"$file")) { $errorcode = "1"; &error; } @lines = ; close(DB); foreach $line (@lines) { if ($line =~ /(.*) , (.*) , (.*) , (.*)/) { $date = $1; $name = $2; $com = $3; $new = $4; $user = "$date , $name , $com , $new\n"; if ($FORM{'chenge_point'} ne $new) { push(@New,$user); } } } if (!open(DB,">$file")) { $errorcode = "1"; &error; } print DB @New; close(DB); &change; } sub reset_log { if (!open(LOG,"$file")) { $errorcode = "1"; &error; } @lines=; close(LOG); $axs=@lines; $max2 = ($axs - $cgmax); if ($axs >= $cgmax) { if (!open(LOG,">$file")) { $errorcode = "1"; &error; } foreach $axs ($max2..$axs) { print LOG $lines[$axs]; } close(LOG); } } sub title { print "Content-type: text/html\n\n"; print "\n"; print "$title\n"; print "\n"; print "\n"; } sub error { if($errorcode eq "1") { $errorcode ="ログファイルが壊れている可能性があります。";} if($errorcode eq "2") { $errorcode ="設定ファイルが壊れている可能性があります。";} print "Content-type: text/html\n\n"; print "Error Error

\n"; print "処理に何らかのエラーが発生し、作業は中止されました。

\n"; if ( $errorcode ne "" ) { print "$errorcode\n"; } print "\n"; exit; } sub quit { $m_error = "ブラウザのバックボタンを押して戻った上、訂正してください。"; if($errorcode eq "1") { $errorcode ="日付が記入されておりません。$m_error";} if($errorcode eq "3") { $errorcode ="内容が記入されておりません。$m_error";} if($errorcode eq "4") { $errorcode ="タイトルが記入されていない、もしくは不適切な文字列です。$m_error";} elsif($errorcode eq "6") { $errorcode ="BGCOLORが記入されておりません。$m_error";} elsif($errorcode eq "7") { $errorcode ="TXTCOLORが記入されておりません。$m_error";} elsif($errorcode eq "8") { $errorcode ="LINKCOLORが記入されておりません。$m_error";} elsif($errorcode eq "9") { $errorcode ="ALINKCOLORが記入されておりません。$m_error";} elsif($errorcode eq "10") { $errorcode ="VLINKCOLORが記入されておりません。$m_error";} elsif($errorcode eq "12") { $errorcode ="タイトルの中でタグを使うことは出来ません。$m_error";} elsif($errorcode eq "20") { $errorcode ="背景の画像を指定するURLの形式が正しくありません。
半角英数字、かつ、http://で始まる形で指定して下さい。$m_error";} elsif($errorcode eq "21") { $errorcode ="ログ保存数は半角数字で指定して下さい。$m_error";} elsif($errorcode eq "22") { $errorcode ="表\示数/頁は半角数字で指定して下さい。$m_error";} elsif($errorcode eq "23") { $errorcode ="ログ保存数が記入されておりません。$m_error";} elsif($errorcode eq "24") { $errorcode ="表\示数/頁が記入されておりません。$m_error";} print "Content-type: text/html\n\n"; print "Error Error

\n"; if ( $errorcode ne "" ) { print "$errorcode\n"; } print "\n"; exit; } sub openchat1 { open(NEWFILE,">$file") || die "error"; print NEWFILE "$date_now , What\'s New?を設置しました。 , これは動作確認を兼ねたメッセージです。動作確認後はご自由に削除して下さい。 , $time2\n"; close(NEWFILE); chmod 0666,$file; } sub openchat2 { open(NEWFILE,">$room") || die "error"; print NEWFILE "\$bd = \'\'\;\n"; print NEWFILE "\$title=\'更新履歴\'\;\n"; print NEWFILE "\$color=\'\#ffffff\'\;\n"; print NEWFILE "\$txtcolor=\'\#333333\'\;\n"; print NEWFILE "\$linkcolor=\'\#003333\'\;\n"; print NEWFILE "\$vlinkcolor=\'\#003333\'\;\n"; print NEWFILE "\$alinkcolor=\'\#ff0000\'\;\n"; print NEWFILE "\$max=\'100\'\;\n"; print NEWFILE "\$limit=\'20\'\;\n"; print NEWFILE "\$z1color=\'\#99cc99\'\;\n"; print NEWFILE "\$head=\'

更新履歴

このスペースには、タイトルやホームページへのリンクなど、HTMLのタグを使って自由に記述が出来ます。\'\;\n"; print NEWFILE "\$rinji=\'

ここは臨時の連絡用スペースです。
常に一番上に表\示しておきたい情報などがある場合はご利用下さい。

\'\;\n"; print NEWFILE "1\;\n"; close(NEWFILE); chmod 0666,$room; }