#!/usr/bin/perl

#↑は、プロバによって変わって来ますので、そちらのサーバーのパスに合わせて下さい。

#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#+++　　[ annevote Ver0.78 ] 2001.01.18 update
#+++
#+++		･････>>> All Created by Tacky
#+++
#+++		･････>>> Copyright (c) 1999.6 Tacky's Room. All rights reserved....
#+++
#+++        Email    >>> tacky2@ops.dti.ne.jp
#+++        Homepage >>> http://tackysroom.com/
#+++
#+++ 設置方法構成(具体例)
#
#+++ public_html（ホームページディレクトリ）
#+++ |
#+++ |-- cgi-bin（任意のディレクトリ）
#+++   |
#+++   |-- jcode.pl     (755)…(日本語ライブラリ)
#+++   |-- annevote.cgi (755)…(スクリプト本体)
#+++   |-- annevote.txt (666)…(ログファイル)
#+++   |-- annevote.ini (666)…(ログファイル)
#+++   |-- annevote.lock　　 …(ロックファイル)※スクリプト側で自動生成及び削除
#+++
#+++ ■( )内はパーミッッションの値です。
#+++ ■annevote.cgi：Perlのパス、その他の項目を修正、テキストモードでアップロード。
#+++ ■annevote.txt：空のファイルを作成（ＤＬファイルに同梱）し、テキストモードでアップロード。
#+++ ■annevote.ini：空のファイルを作成（ＤＬファイルに同梱）し、テキストモードでアップロード。
#+++ ■annevote.lock：各自で用意する必要ありません。
#+++
#+++ >>> Update-History...
#+++
#+++    2001.01.18  >>  出席者のトータル人数を表示するようにしました。
#+++                    ログクリア機能を追加。
#+++    2000.10.28  >>  メール送信部分の「Email」箇所を若干修正
#+++    2000.10.17  >>  投稿日を追加。※以前のログファイルと互換性がありませんのでご注意下さい!!!!!!
#+++                >>  Sendmailって本当に送られたかどうかって心配な人いません？僕がそう（笑）なので、mailtoリンク文の生成のみを行う設定を追加しました
#+++    2000.07.12  >>  ﾌｧｲﾙﾛｯｸが解除されない場合がある不具合修正
#+++	2000.06.20  >>　CSS追加・ﾛｯｸ処理見直し・ﾌｫﾝﾄｻｲｽﾞ指定可・Apache+Netscape文字化け対応
#+++                    メッセージ欄の桁数＆行数を指定可能にしました
#+++
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

require './jcode.pl';									#日本語コード変換
$script 		= "./annevote.cgi";						#このスクリプトの名前
$logfile 		= "./annevote.txt";						#メッセージのログファイル名
$inifile 		= "./annevote.ini";						#お知らせ内容保存ファイル名
$lockfile 		= "./annevote.lock";					#ロックファイル名（変更不要）
$method			= "POST";								#METHODの指定（POSTで動作しなかったら、GET)
require './config.txt';

#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Sendmailが使える方のみ以下の項目を設定して下さい。
#    ※Sendmailとは？
#　　　メールソフトを立ち上げないで、指定した相手にメールを送る事が出来る機能です。
#　　　自分のプロバイダーがSendmailに対応しているか、パスはどこ？等は、各自のプロバイダー
#　　　のＨＰでご確認して下さいね。
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

#メール送信する場合、sendmailのパスを指定
$sendmail = "";

#メール送信先アドレス。（管理者のアドレス）…「@」の前には「\」を必ずつけてね。「\」を付けないとInternalServererrorになるからね
#※（Sendmailを使わない場合でも設定して下さい）
$smail_address = "";

$smail_name    = "webmaster" ;		#管理人の名前を指定

$hiho			= 0 ;	#プロバイダーが「hi-ho」の人のみ「1」にして下さい。　※Sendmail使う場合

$sendflg1		= 1 ;	#投稿時に管理人に登録内容をメール送信します？(0:しない 1:する)
$sendflg2		= 1 ;	#ブラウザ上から、登録メンバー宛にメッセージ送信を可能にします？(0:しない 1:する)
$sendflg3		= 1 ;	#Senamailは本当に届いているから心配なので、画面上に送信対象メンバーのアドレスをmailtoで表示するだけにしておく？(0: mailto 1:Sendmail )

#投稿時のパスワードをcrypt関数を使用する（暗号化）
#crypt関数が利用出来ない場合もありますので、投稿時にエラーになる場合は、「0:使用しない」にして下さいね。
$ango			= 0 ;	#0:使用しない 1:使用する　（推奨：１：使用する）

$col 		= 36 ;			#メッセージ欄の桁数
$row 		= 4 ;			#メッセージ欄の行数

#=============================================================================================================================================================================================
#フォームＣＳＳ設定　※使用しない場合は、$css_style = "";とし、そこから２行(先頭がEOMの行までを)を削除して下さい。
$css_style = <<"EOM";
STYLE="font-size:$pt;color:#000000;border:1 dotted #666666;" onFocus="this.style.backgroundColor='#FFFFFF'" onBlur="this.style.backgroundColor='#FFFFFF'"
EOM

#<<<　↓ここから下はいじらない方が身のためです。(^^ゞ
###############################################################################
#### Main Process  START  #####################################################
###############################################################################
if ($ENV{'HTTP_USER_AGENT'} !~ /MSIE/i) {	$css_style = "" ;	}
$ENV{'TZ'} = "JST-9";
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);	#システム日時・時刻取得
$year  = sprintf("%02d",$year + 1900);$month = sprintf("%02d",$mon + 1);$mday  = sprintf("%02d",$mday);
$hour  = sprintf("%02d",$hour);$min   = sprintf("%02d",$min);
$week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat') [$wday];
$today = "$month/$mday($week) $hour:$min";

#<<<フォームデコード＆変数代入
&decode ;
if ( $FORM{'action'} eq "maintenance" ) {      			#<<<"処理"がメンテナンスの場合
	if ( $FORM{'proc'} eq "mlform" )		{			#<<<メンバー宛入力フォーム
		if ( $FORM{'pass'} eq "")	{	&error("パスワードを入力して下さい");	}
		if ( $FORM{'pass'} ne $password)	{	&error("管理者以外はこの機能\は使えません");	}
		&header ;						   					#<<<htmlヘッダーの出力
		&mailform ;
		&footer ;						   					#<<< htmlフッターの出力
	}	elsif ( $FORM{'proc'} eq 'naiyoup' )	{
		if ( $FORM{'pass'} eq "")	{	&error("パスワードを入力して下さい");	}
		if ( $FORM{'pass'} ne $password)	{	&error("管理者以外はこの機能\は使えません");	}
		&header ;						   					#<<<htmlヘッダーの出力
		&infoform ;
		&footer ;						   					#<<< htmlフッターの出力
	}	elsif	( $FORM{'proc'} eq "clear" )	{			#<<<ログクリア
		if ( $FORM{'pass'} eq "")	{	&error("パスワードを入力して下さい");	}
		if ( $FORM{'pass'} ne $password)	{	&error("管理者以外はこの機能\は使えません");	}
		&clear ;
	}	elsif	( $FORM{'proc'} eq "clear2" )	{			#<<<ログクリア（メンバーリストコピー）
		if ( $FORM{'pass'} eq "")	{	&error("パスワードを入力して下さい");	}
		if ( $FORM{'pass'} ne $password)	{	&error("管理者以外はこの機能\は使えません");	}
		&clear2 ;
	}	else	{
		&Maintenance;
	}
}	elsif	( $FORM{'action'} eq "input" )		{		#<<<入力フォーム
	&header ;						   					#<<<htmlヘッダーの出力
	&Inputform ; 				    		   			#<<<入力フォームの表示
	&footer ;						   					#<<< htmlフッターの出力
}	elsif	( $FORM{'action'} eq "update" )		{		#<<<ログファイル更新（編集時）
	&update ;
}	elsif	( $FORM{'action'} eq "update2" )	{		#<<<設定ファイル更新（編集時）
	&update2 ;
}	elsif	( $FORM{'action'} eq "maillink" )	{			#<<<mailtoリンク生成
	&header ;						   					#<<<htmlヘッダーの出力
	&SMail2(1) ;
	&footer ;						   					#<<< htmlフッターの出力
}	elsif	( $FORM{'action'} eq "sendml" )		{		#<<<管理者からのSendmail
	&SMail2(0) ;
	print "Location: $script?\n\n";						#メインCGIに戻る
}	else	{
	if ( $FORM{'action'} eq "regist" ) {	   			#<<<"処理"が登録の場合
	 	&regist; 										#ログ登録処理
	}
	&header ;						   					#<<<htmlヘッダーの出力
	&disp ;							   					#<<<登録済メッセージの表示
	&footer ;						   					#<<< htmlフッターの出力
}
###############################################################################
#### Main Process  END  #######################################################
###############################################################################

###<--------------------------------------------------------------
###<---   デコード＆変数代入
###<--------------------------------------------------------------
sub decode{
	if ($ENV{'REQUEST_METHOD'} eq "POST") {
		read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
	} else { $buffer = $ENV{'QUERY_STRING'}; }
	@pairs = split(/&/,$buffer);
	@msg = ();
	foreach $pair (@pairs) {
		($name, $value) = split(/=/, $pair);
		$value =~ tr/+/ /;
		$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
		$value  =~ s/\r\n/\<br\>/g;
		$value  =~ s/\r|\n/\<br\>/g;
		$value =~ s/\,/，/g;
		&jcode'convert(*value,'sjis');
		$FORM{$name} = $value;
	}
}
###<--------------------------------------------------------------
###<---   HTMLヘッダー書き出し
###<--------------------------------------------------------------
sub	header	{
	print "Content-type: text/html; charset=Shift_JIS\n\n";
	print "<html>\n<head>\n";
	print "<META HTTP-EQUIV=\"Content-type\" CONTENT=\"text/html; charset=x-sjis\">\n";
	print "<title>$title</title>\n";
	#<<<CSS START>>>
	print "<style type=\"text/css\">\n";
	print "<!--\n";
	print "a:link    {font-size: $pt; text-decoration:none; color:$linkcolor }\n";
	print "a:visited {font-size: $pt; text-decoration:none; color:$vlinkcolor }\n";
	print "a:active  {font-size: $pt; text-decoration:none; color:$alinkcolor }\n";
	print "a:hover   {font-size: $pt; text-decoration:underline; color:$hovercolor; }\n";
	print "body,tr,td { font-size: $pt;}\n";
	print "-->\n";
	print "</style>\n";
	#<<<CSS END>>>
	print "</head>\n";
	if ($backpicture) { $set = "background=\"$backpicture\""; if ( $bgcolor ) { $set .= " bgcolor=\"$bgcolor\"" ; }	}
	elsif ($bgcolor )	{ $set = "bgcolor=\"$bgcolor\""; }
	print "<body $set text=$tcolor link=$linkcolor vlink=$vlinkcolor alink=$alinkcolor>\n";
}
###<--------------------------------------------------------------
###<---   HTMLフッダー書き出し
###<--------------------------------------------------------------
sub footer {
	#<<<　↓消さないでネ♪
	print "<p align=right><font size=2><a href=http://tackysroom.com target=_top>annevote Ver0.78 Created by Tacky</a><br><a href=http://www.netpia.jp target=_top>Type-B Ver1.3 Powered by Hand in Hand Inc.</a></font></p>\n";
	print "</body></html>\n";
}
###<--------------------------------------------------------------
###<---   入力フォーム
###<--------------------------------------------------------------
sub	Inputform	{
	print "<a href=$url target=_top>[HOME]</a>\n";
	print "<center>\n";
	if ( $titlelogo )	{	print "<img src=$titlelogo border=0>\n";	}
	else	{	print "<font size=+1>$title</font>\n";	}
	print "<br><br><form action=$script method=$method>\n";
	if ( $FORM{'action'} ne 'maintenance' )	{
		print "<input type=hidden name=\"action\" value=\"regist\">\n";
	}	else	{
		print "<input type=hidden name=\"action\" value=\"update\">\n";
		print "<input type=hidden name=\"name\" value=\"$FORM{'name'}\">\n";
		print "<input type=hidden name=\"proc\" value=\"edit\">\n";
	}
	print "<table border=0 cellspacing=1 cellpadding=0 bgcolor=#000000>\n";
	print "<tr><td>\n";
	print "<table border=0 cellspacing=0 cellpadding=3>\n";
	print "<tr><td bgcolor=#ffffcc nowrap>お名前</td>\n";
	print "<td bgcolor=#ffffcc>\n";
	if ( $FORM{'action'} ne 'maintenance' )	{
		print "<input type=text name=\"name\" size=40 maxlength=100 value=\"$c_name\" $css_style>\n";
	}	else	{
		print "$c_name" ;
	}
	print "</td>\n";
	print "<td bgcolor=#ffffcc nowrap>Email（省略可）</td>\n";
	print "<td bgcolor=#ffffcc><input type=text name=\"email\" size=26 maxlength=100 value=\"$c_email\" $css_style></td></tr>\n";
	print "<tr><td bgcolor=#ffffcc nowrap>出欠</td>\n";
	print "<td bgcolor=#ffffcc><select name=\"sel\">\n";
	for ( 0..$#sanka )	{
		if ( $c_sel && $c_sel == $_ ) { $dmy = "selected" ; } else { $dmy = "" ; }
		print "<option value=$_ $dmy>$sanka[$_]\n";
	}
	print "</select></td>\n";
	print "<td bgcolor=#ffffcc nowrap>メッセージ</td>\n";
	print "<td bgcolor=#ffffcc><textarea name=\"com\" cols=$col rows=$row $css_style>$c_comment</textarea></td></tr>\n";
	print "<tr><td bgcolor=#ffffcc nowrap valign=top>登録コード</td>\n";
#	print "<tr><td bgcolor=#ffffcc nowrap valign=top>パスワード</td>\n";
#	print "<tr><td bgcolor=#ffffcc nowrap valign=top></td>\n";
	print "<td bgcolor=#ffffcc>\n";
	print "<input type=password name=\"code\" size=10 value=\"\" $css_style><br><font size=2>※($c_code\と入力)</font></td>\n";
#	print "<input type=password name=\"pass\" size=10 value=\"$c_pass\" $css_style><br><font size=2>※(英数字4〜8文字,訂正・削除の時使用)</font></td>\n";
	print "</td>\n";
	print "<td bgcolor=#ffffcc>&nbsp;</td><td bgcolor=#ffffcc><input type=submit value=登録する>\n";
	print "&nbsp;&nbsp;<input type=reset value=クリア>\n";
	print "</td></tr></table>\n";
	print "</td></tr></table></form>\n";
}
###<--------------------------------------------------------------
###<---   メンバー宛フォーム
###<--------------------------------------------------------------
sub	mailform	{
	if ( !(open(IN,"$logfile")))	{	&error("ログファイル($logfile)のオープンに失敗しました");	}
	@data = <IN>;	close(IN);
	print "<a href=$url target=_top>[HOME]</a>\n";
	print "<center>\n";
	if ( $titlelogo )	{	print "<img src=$titlelogo border=0>\n";	}
	else	{	print "<font size=+1>$title</font>\n";	}
	print "<form action=$script method=$method>\n";
	print "<br><br><table border=0 cellspacing=0 cellpadding=3>\n";
	print "<tr><td>▼&nbsp;メールを送る人を選択して下さい<br></td></tr>\n";
	print "<tr><td>\n";
	$no = 1 ;
	if ( @data > 0 )	{
		print "<table border=0 cellspacing=0 cellpadding=0>\n";
		foreach ( @data )	{
			($nm,$em,$sel,$cm,$p,$dt) = split(/,/,$_);
			$no = sprintf("%02d",$no) ;
			print "<tr>\n";
			print "<td><input type=checkbox name=send$no>$nm</td>";
			print "<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sanka[$sel]</td>";
			print "</tr>\n";
			$no++;
		}
		print "</table>\n";
	}
	print "</td></tr>\n";
	if ( $sendflg3 == 1 )	{
		print "<tr><td><b>▼</b>&nbsp;メッセージ</td></tr>\n";
		print "<tr><td><textarea name=\"com\" cols=60 rows=7 $css_style></textarea><br>\n";
		print "<input type=hidden name=\"action\" value=\"sendml\">\n";
		print "<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type=submit value=送信>\n";
	}	else	{
		print "<tr><td><input type=hidden name=\"action\" value=\"maillink\">\n";
		print "<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type=submit value=\"mailtoリンク文を生成する\">\n";
	}
	print "<input type=reset value=クリア>\n";
	print "</td></tr>\n";
	print "</table></form>\n";
}
###<--------------------------------------------------------------
###<---   お知らせ内容の変更
###<--------------------------------------------------------------
sub	infoform	{
	if ( !(open(IN,"$inifile")))	{	&error("ログファイル($inifile)のオープンに失敗しました");	}
	$com = <IN>;	close(IN);
	$com =~ s/<br>/\n/g;
	print "<a href=$url target=_top>[HOME]</a>\n";
	print "<center>\n";
	if ( $titlelogo )	{	print "<img src=$titlelogo border=0>\n";	}
	else	{	print "<font size=+1>$title</font>\n";	}
	print "</center><blockquote>\n";
	print "<form action=$script method=$method>\n";
	print "▼&nbsp;オフ会・イベント等のお知らせメッセージをご記入下さい。<br>\n";
	print "<textarea name=\"com\" cols=70 rows=10 $css_style>$com</textarea><br>\n";
	print "<input type=hidden name=\"action\" value=\"update2\">\n";
	print "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type=submit value=更　新>\n";
	print "&nbsp;&nbsp;&nbsp;<input type=reset value=クリア>\n";
	print "</form></blockquote>\n";
}
###<--------------------------------------------------------------
###<---   ログ表示
###<--------------------------------------------------------------
sub	disp	{
	if ( !(open(IN,"$logfile")))	{	&error("ログファイル($logfile)のオープンに失敗しました");	}
	@data = <IN>;	close(IN);

	print "<a href=$url target=_top>[HOME]</a>\n";
	print "<center>\n";
	if ( $titlelogo )	{	print "<img src=$titlelogo border=0><br><br>\n";	}
	else	{	print "<font size=+1>$title</font><br><br>\n";	}
	&setumei;	#<<<「メッセージ」の表示
	print "<hr width=80% size=1 noshade color=#000000>\n";

	print "<br>\n";
	print "<table border=0 cellspacing=1 cellpadding=0 bgcolor=#000000 width=75%>\n";
	print "<tr><td>\n";
	print "<table width=100% border=0 cellspacing=1 cellpadding=5>\n";
	print "<tr><td bgcolor=#ff9900 align=center><font color=#ffffff>メンバー</font></td>\n";
	print "<td bgcolor=#ff9900><font color=#ffffff align=center>登録</font></td>\n";
	print "<td bgcolor=#ff9900 width=50% align=center><font color=#ffffff>メッセージ</font></td>\n";
	print "<td bgcolor=#ff9900 nowrap align=center><font color=#ffffff>登録日</font></td></tr>\n";

	foreach $buf ( @data )	{
		($nm,$em,$sele,$cm,$pass,$dt) = split(/,/,$buf);
		$dt =~ s/\n//g;
		if ( $bg eq $cellbgcolor1 ) {
			$bg = $cellbgcolor2;
		}	else	{
			$bg = $cellbgcolor1;
		}
		print "<tr><td bgcolor=$bg nowrap><font color=$textcolor>\n";
		print "<a href=mailto:$em>$nm</a></font></td>\n";
		print "<td bgcolor=$bg nowrap><font color=$textcolor>$sanka[$sele]</font></td>\n";
		print "<td bgcolor=$bg><font color=$textcolor>$cm</font></td>\n";
		print "<td bgcolor=$bg nowrap><font color=$textcolor>$dt</font></td>\n";
#		print "</td></tr>\n";
		print "</tr>\n";
		$SAN[$sele]++ ;
	}
	print "</table></td></tr></table><br>\n";
	print "<hr width=80% size=1>\n";
	print "<table width=30% border=0 cellpadding=1><tr><td bgcolor=#000000>";
	print "<table width=100% border=0 cellpadding=0 cellspacing=1><tr><td colspan=2 align=center bgcolor=#ffffcc>▼▼現在の登録状況▼▼</td></tr>";
	foreach ( 0..$#sanka )	{
		if ( $SAN[$_] ) { $wk = $SAN[$_] ; } else { $wk = 0 ; }
		print "<tr><td bgcolor=#ffffcc>$sanka[$_]</td><td align=right bgcolor=#ffffcc>$wk人</td></tr>\n";
	}
	print "</table></td></tr></table><br>\n";

	print "<hr width=80% size=2>\n";
	print "<form>\n";
	print "<INPUT TYPE=button VALUE=\"ゲストの方（お名前のない方）はここから登録してください\" ";
	print "onClick=\"location.href = \'$script?action=input\'\">\n";
	print "</form>\n";

	print "<hr width=80% size=2>\n";
	print "<form action=\"$script\" method=\"$method\">\n";
	print "管理者専用　<select name=proc>\n";
	print "<option value=\"naiyoup\">お知らせ内容の変更</option>";
	print "<option value=\"clear\">登録内容の初期化（メンバーなしで初期化）</option>";
	print "<option value=\"clear2\">登録内容の初期化（メンバーリストで初期化）</option>";
	print "<option value=\"delete\">右で選択した登録を削除</option>";
	print "</select>\n";

	print "<select name=\"name\">\n";
	print "<option value=\"\">↓登録削除の場合↓</option>";
	$no = 0 ;
	foreach $buf ( @data )	{
		($nm,$em,$sele,$cm,$pass,$dt) = split(/,/,$buf);
		print "<option value=\"$nm\">$nm</option>\n";
	}

	print "</select>&nbsp;管理者パスワード　<input type=password name=\"pass\" size=10>\n";
	print "<input type=hidden name=\"action\" value=\"maintenance\">\n";
	print "<input type=submit value=\"実行\">\n";
	print "<hr width=80% size=2>\n";
	print "</form></center>\n";

}
###<--------------------------------------------------------------
###<---   ログ出力（登録処理−ゲストの新規登録の場合）
###<--------------------------------------------------------------
sub	regist	{
	if ( $FORM{'name'} eq "" ) {&error("名前は省略出来ません。ブラウザの戻るボタンで再入力して下さい。");}
	if ( $FORM{'code'} ne $c_code ) {&error("登録コードが間違っています。ブラウザの戻るボタンで再入力して下さい。");}
#	if ( $FORM{'email'} eq "" ) {	&error("emailは省略出来ません");}
#	if ($email && $email !~ /(.*)\@(.*)\.(.*)/) {	&error("メールアドレスが不正です。");	}

	&filelock ;	#ファイルロック

	if ( !(open(IN,"$logfile")))	{	&fileunlock ;	&error("ログファイル($logfile)のオープンに失敗しました");	}
	@data = <IN>;
	close (IN);

	foreach ( @data )	{
		($nm,$em,$sel,$cm,$p,$dt) = split(/,/,$_);
		if ( $FORM{'name'} eq $nm )	{	&fileunlock ;	&error("あなたは既に登録されています");		}
	}
	# パスワードの暗号化（crypt関数使用））
#	if ($FORM{'pass'} ne "") { &pass_enc($FORM{'pass'}); }	else	{ $pass #= '' ; }
        $pass = $FORM{'pass'};
	unshift(@data,"$FORM{'name'},$FORM{'email'},$FORM{'sel'},$FORM{'com'},$pass,$today\n");

	if ( !(open(OUT,">$logfile")))	{	&fileunlock ;	&error("ログファイル($logfile)のオープンに失敗しました");	}
	print OUT @data;
	close(OUT);

	&fileunlock ;	#ファイルロック解除

	if ( $sendmail && $sendflg1 == 1 ) { &SMail ;	}

	print "Location: $script?\n\n";							#メインCGIに戻る

}
###<--------------------------------------------------------------
###<---   メンテナンスモード
###<--------------------------------------------------------------
sub Maintenance {
#	if ( $FORM{'pass'} eq "")	{	&error("パスワードを入力して下さい");	}

	if ( !(open(IN,"$logfile")))	{	&error("ログファイル($logfile)のオープンに失敗しました");	}
	@data = <IN>;
	close(IN);

	$found = 0 ;
	foreach ( @data )	{
		($c_name,$c_email,$c_sel,$c_comment,$pass,$dt) = split(/,/,$_);
		if ( $FORM{'name'} eq $c_name )	{
			$found = 1 ;
#			if ($FORM{'pass'} ne $password && (&pass_dec($pass))) { #&error("パスワードが違います。"); }
#			if (($FORM{'pass'} ne $password) && ($FORM{'pass'} ne $pass)) { &error("パスワードが違います。"); }
			if ( $FORM{'proc'} eq "delete" )	{
				&update ;
				exit;
			}
			&header ;
			$c_pass = $FORM{'pass'} ; $c_comment =~ s/<br>/\n/g;
			&Inputform ;
			last;
		}
	}
	if ( $found == 0 )	{
		&error("該当する記事Noのデータは存在していません。");
	}
	&footer ;
}
###<--------------------------------------------------------------
###<---   ログファイル更新（メンバーリストの場合の登録・ゲストの変更）
###<--------------------------------------------------------------
sub update {

	if ( $FORM{'proc'} ne "delete" )	{
		if ( $FORM{'code'} ne $c_code ) {&error("登録コードが間違っています。ブラウザの戻るボタンで再入力して下さい。");};
	}



	&filelock ;	#ファイルロック
	if ( !(open(IN,"$logfile")))	{	&fileunlock ;	&error("ログファイル($logfile)のオープンに失敗しました");	}
	@data = <IN>;
	close(IN);

	@new = ();
    foreach $buf (@data) {
		($n,$e,$s,$c,$pass,$dt) = split(/,/,$buf);
		if ( $FORM{'name'} eq $n)	{								#<<<メンテ対象者の場合
			if ( $FORM{'proc'} eq "edit" )	{
				# パスワードの暗号化（crypt関数使用））
				if ($FORM{'pass'} ne "") { &pass_enc($FORM{'pass'}); }	else	{ $pass = '' ; }
				push(@new,"$FORM{'name'},$FORM{'email'},$FORM{'sel'},$FORM{'com'},$pass,$today\n");
			}
		}	else	{
			push(@new,$buf); 								#<<<そのまま出力
		}
	}

	if ( !(open(OUT,">$logfile")))	{	&fileunlock ;	&error("ログファイル($logfile)のオープンに失敗しました");	}
	print OUT @new;
	close(OUT);
	&fileunlock ;	#ファイルロック解除

	if ( $sendmail && $sendflg1 == 1 ) { &SMail ;	}

	print "Location: $script?\n\n";							#メインCGIに戻る

}
###<--------------------------------------------------------------
###<---   設定ファイル更新
###<--------------------------------------------------------------
sub update2 {

	&filelock ;	#ファイルロック

	if ( !(open(OUT,">$inifile")))	{	&fileunlock ;	&error("ログファイル($inifile)のオープンに失敗しました");	}
	print OUT $FORM{'com'};
	close(OUT);

	&fileunlock ;	#ファイルロック解除

	print "Location: $script?\n\n";							#メインCGIに戻る

}
##<--------------------------------------------------------------
###<---   SendMail(投稿時のメール送信）)
###<--------------------------------------------------------------
sub SMail {
	$ttl = $title;
	if ( $hiho == 1 )	{
	   	&jcode'convert(*ttl,'euc');
		open(MAIL,"| $sendmail -s \"$ttl\" -f $FORM{'email'} $smail_address ") || &error("Sendmail Error!!");
	}	else	{
		open(MAIL,"| $sendmail -t") || &error("Sendmail Error!!");
		$mailbuf = "To: $smail_address\n";
		$mailbuf .= "Reply-to: $FORM{'email'}\n";
		$mailbuf .= "Subject: $ttl\n";
		$mailbuf .= "Content-Transfer-Encoding: 7bit\n";
		$mailbuf .= "Content-type: text/plain\n";
		$mailbuf .= "\n\n";
	}
	$mailbuf .= "============================================================\n";
	$mailbuf .= "■---『$FORM{'name'}』さんから投稿がありました---■\n\n";
	$mailbuf .= "投稿日時：$today\n";
	$mailbuf .= "投稿者のお名前：$FORM{'name'}\n";
	$mailbuf .= "投稿者のメールアドレス： $FORM{'email'}\n";
	$mailbuf .= "============================================================\n\n";
	$mailbuf .= "■選択：$sanka[$FORM{'sel'}]\n\n";
	$mailbuf .= "■コメント\n";
	$mailbuf .= "$FORM{'com'}\n\n";
	$mailbuf .= "============================================================\n";

	#漢字コードＪＩＳ変換＆改行コードLF変換。
	$mailbuf	=~ s/\r\n/\n/g;		$mailbuf	=~ s/\r/\n/g;	$mailbuf	=~ s/<br>/\n/g;
   	&jcode'convert(*mailbuf,'jis');
	print MAIL	$mailbuf ;
	close(MAIL);
}
###<--------------------------------------------------------------
###<---   SendMail2(管理者からのメール送信）)
###<--------------------------------------------------------------
sub SMail2 {
	if ( !(open(IN,"$logfile")))	{	&error("ログファイル($logfile)のオープンに失敗しました");	}
	@data = <IN>;	close(IN);
	$ttl = $title;
	$no = 1 ;
	foreach ( @data )	{
		($nm,$em,$sel,$cm,$p,$dt) = split(/,/,$_);
		if ($em =~ /(.*)\@(.*)\.(.*)/) {
			$no = sprintf("%02d",$no);	$wk = "send$no";
			if ( $FORM{$wk} eq "on" )	{
				if ( $sendflg3 == 1 )	{
					$mailbuf = "";
					if ( $hiho == 1 )	{
					   	&jcode'convert(*ttl,'euc');
						open(MAIL,"| $sendmail -s \"$ttl\" -f $smail_address $em") || &error("Sendmail Error!!");
					}	else	{
						open(MAIL,"| $sendmail -t") || &error("Sendmail Error!!");
						$mailbuf .= "To: $em\n";
						$mailbuf .= "From: $smail_address\n";
						$mailbuf .= "Subject: $ttl\n";
						$mailbuf .= "Content-Transfer-Encoding: 7bit\n";
						$mailbuf .= "Content-type: text/plain\n";
						$mailbuf .= "\n\n";
					}
					$mailbuf .= "============================================================\n";
					$mailbuf .= "■---　管理人からのお知らせです　---■\n\n";
					$mailbuf .= "投稿日時：$today\n";
					$mailbuf .= "投稿者のお名前：$smail_name\n";
					$mailbuf .= "投稿者のメールアドレス： $smail_address\n";
					$mailbuf .= "============================================================\n\n";
					$mailbuf .= "■連絡事項\n";
					$mailbuf .= "$FORM{'com'}\n\n";
					$mailbuf .= "============================================================\n";

					#漢字コードＪＩＳ変換＆改行コードLF変換。
					$mailbuf	=~ s/\r\n/\n/g;		$mailbuf	=~ s/\r/\n/g;	$mailbuf	=~ s/<br>/\n/g;
				   	&jcode'convert(*mailbuf,'jis');
					print MAIL	$mailbuf ;
					close(MAIL);
				}	else	{
					$mailbuf .= $em . ";" ;
				}
			}
		}
		$no++;
	}
	if ( $sendflg3 == 0 )	{
		print "<center><br><br><br><hr><br>[<a href=\"mailto:$mailbuf\">メールを送る</a>]<br><br><hr><br><br></center>\n";
	}
}
###<--------------------------------------------------------------
###<---   使い方の説明部分
###<--------------------------------------------------------------
sub setumei	{
	if ( !(open(IN,"$inifile")))	{	&error("ログファイル($inifile)のオープンに失敗しました");	}
	$com = <IN>;	close(IN);
	print "<table border=0 cellspacing=1 cellpadding=0 bgcolor=#000000 width=75%>\n";
	print "<tr><td>\n";
	print "<table border=0 cellspacing=0 cellpadding=5 width=100%>\n";
	print "<tr><td bgcolor=#990000>\n";
	print "<font color=ffffff>■　お知らせ&nbsp;&nbsp;&nbsp;\n";
#	print "━━━━━&nbsp;&nbsp;&nbsp;&nbsp;お問合せは&nbsp;&nbsp;<a href=mailto:$smail_address>こちら</a></font></td></tr>\n";
	print "<tr><td bgcolor=#ffffcc>\n";
	print "<font size=2>$com</font>\n";
	print "<div align=center>\n";

	print "</div>\n";
	print "</td></tr></table>\n";
	print "</td></tr></table>\n";


	print "<form action=\"$script\" method=\"$method\">\n";
	print "<font size=-1>お名前を選択し出欠を登録して下さい。ゲストの方は画面下部より登録して下さい。<BR><BR> \n";
	print "<select name=\"name\">\n";
	print "<option value=\"\">↓↓↓お名前を選択して下さい↓↓↓</option>";
	$no = 0 ;
	foreach $buf ( @data )	{
		($nm,$em,$sele,$cm,$pass,$dt) = split(/,/,$buf);
		print "<option value=\"$nm\">$nm</option>\n";
	}
	print "</select>\n";
	#	print "</select>&nbsp;登録パスワード:<input type=password name=\"pass\" size=10>\n";
	print "<input type=hidden name=\"proc\" value=\"edit\">\n";
	print "<input type=hidden name=\"action\" value=\"maintenance\">\n";
	print "<input type=submit value=\"登録・訂正\">\n";
	print "</form>\n";



}
###<-------------------------------------------------------------
###<---   パスワード暗号化
###<--------------------------------------------------------------
sub pass_enc {
	if ( $ango == 1 ) {		$pass = crypt($_[0], $_[0]);
	}	else	{	$pass = $_[0];	}
}
###<-------------------------------------------------------------
###<---   パスワードチェック
###<--------------------------------------------------------------
sub pass_dec {
	if ( $ango == 1 ) {
		if ($_[0] ne '' && ( crypt($FORM{'pass'}, $_[0]) eq $_[0]) )  {
			return 0 ;
		}
	}	else	{
		if ($FORM{'pass'} eq $_[0]) {
			return 0 ;
		}
	}
	return 1;
}
###<--------------------------------------------------------------
###<---   ファイルロック設定
###<--------------------------------------------------------------
sub filelock {
	foreach (1 .. 5) {
		if (-e $lockfile) { sleep(1); }
		else {
			open(LOCK,">$lockfile");	close(LOCK);	return;
		}
	}
	&error("只今他の方が書き込み中です。ブラウザの「戻る」で戻って再度登録を行って下さい。");
}
###<--------------------------------------------------------------
###<---   ファイルロック解除
###<--------------------------------------------------------------
sub fileunlock {
	if (-e $lockfile) { unlink($lockfile); }
}
###<--------------------------------------------------------------
###<---   エラー処理
###<--------------------------------------------------------------
sub error {
	&header ;
	print "<br><br><br>$_[0]<br><br><br>";
	&footer;
	exit;
}

###<--------------------------------------------------------------
###<---   ログファイルクリア（クリア）
###<--------------------------------------------------------------
sub clear {
	&filelock ;	#ファイルロック

	if ( !(open(OUT,">$logfile")))	{	&fileunlock ;	&error("ログファイル($logfile)のオープンに失敗しました");	}
	close(OUT);

	&fileunlock ;	#ファイルロック解除

	&header ;
	print "<h2>ログの初期化が終了しました。</h2>";
	print "[<A HREF=\"$script\">BACK</A>]" ;
	print "&nbsp;&nbsp;&nbsp;[<A HREF=\"$url\">HOMEに戻る</A>]" ;
	print "<br><br><br>\n";
	print "</center></body></html>\n";
	exit ;
}

###<--------------------------------------------------------------
###<---   ログファイルクリア（membersをコピー）
###<--------------------------------------------------------------
sub clear2 {
	if ( !(open(IN,"$members")))	{	&fileunlock ;	&error("ログファイル($logfile)のオープンに失敗しました");	}
	@data = <IN>;
	close (IN);

	foreach ( @data )	{
		($nm,$em,$sel,$cm,$p,$dt) = split(/,/,$_);
#		if ( $FORM{'name'} eq $nm )	{	&fileunlock ;	&error("あなたは既に登録されています");		}
	}
	# パスワードの暗号化（crypt関数使用））
#	if ($FORM{'pass'} ne "") { &pass_enc($FORM{'pass'}); }	else	{ $pass #= '' ; }
#        $pass = $FORM{'pass'};
#	unshift(@data,"$FORM{'name'},$FORM{'email'},$FORM{'sel'},$FORM{'com'},$pass,$today\n");

	if ( !(open(OUT,">$logfile")))	{	&fileunlock ;	&error("ログファイル($logfile)のオープンに失敗しました");	}
	print OUT @data;
	close(OUT);

	&fileunlock ;	#ファイルロック解除

	&header ;
	print "<h2>ログの初期化が終了しました。</h2>";
	print "[<A HREF=\"$script\">BACK</A>]" ;
	print "&nbsp;&nbsp;&nbsp;[<A HREF=\"$url\">HOMEに戻る</A>]" ;
	print "<br><br><br>\n";
	print "</center></body></html>\n";
	exit ;
}