#!/usr/bin/perl

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

#require 'member.cgi';


#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#+++　　[ annevote Ver0.78 ] 2001.01.18 update
#+++
#+++		・・・・・>>> All Created by Tacky				     
#+++
#+++		・・・・・>>> Copyright (c) 1999.6 Tacky's Room. All rights reserved....
#+++
#+++        Email    >>> ayaki@spice.cs.ritsumei.ac.jp
#+++        Homepage >>> http://www.spice.cs.ritsumei.ac.jp/~ayaki/
#+++
#+++ 設置方法構成(具体例)
#
#+++ 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)
$title			= '◆感性商品研究部会研究会のご案内◆';	#タイトルを指定
$titlelogo 		= '';									#タイトルロゴを指定。指定しない場合は''として下さい
$backpicture 	= "";									#背景に画像を表示する場合、フルパスで指定。
$bgcolor		= "#ffcc00";							#背景色

$tcolor			= "#000000";							# 文字色
$linkcolor		= "#cc6600";							# リンク色（未読リンク）
$vlinkcolor		= "#666666";							# リンク色（既読リンク）
$alinkcolor		= "#ff3300";							# リンク色（押した時）
$hovercolor		= '#ff0000';							#リンクをポイントした際のアンダーライン色(IEのみ)
$pt				= '10pt';							#全体のフォントサイズ（pt指定以外何があるのか、僕知らない。(^^ゞ）	#i000331

$cellbgcolor1 	= "#ffcc66";							#メッセージ表示部分のセル背景色１
$cellbgcolor2 	= "#ffff66";							#メッセージ表示部分のセル背景色２（１と２で繰り返し表示される）
$textcolor    	= "#990000";							#メッセージ表示部分のテキスト文字色
$url 			= "http://www.spice.ci.ritsumei.ac.jp/";	#戻り先のURL
$password 		= "KamLab";								#管理者メンテナンス用パスワード（ログ編集用））

@sanka			= ('研究会に参加','研究会と懇親会に参加','参加の可能性あり','参加できません');

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

#メール送信する場合、sendmailのパスを指定
$sendmail = "kamei@ci.ritsumei.ac.jp";

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

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

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

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

#投稿時のパスワードをcrypt関数を使用する（暗号化）
#crypt関数が利用出来ない場合もありますので、投稿時にエラーになる場合は、「0:使用しない」にして下さいね。
$ango			= 1 ;	#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='#ffffcc'" 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 ;
	}	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,'euc');
		$FORM{$name} = $value;
	}
}
###<--------------------------------------------------------------
###<---   HTMLヘッダー書き出し
###<--------------------------------------------------------------
sub	header	{
	print "Content-type: text/html; charset=euc-jp\n\n";
	print "<html>\n<head>\n";
	print "<META HTTP-EQUIV=\"Content-type\" CONTENT=\"text/html; charset=euc-jp\">\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://www.spice.ci.ritsumei.ac.jp/~robocup/ target=_top>annevote Ver0.78 Created by Tacky</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=#ff9900 nowrap>お名前</td>\n";
	print "<td bgcolor=#ff9900>\n";
	if ( $FORM{'action'} ne 'maintenance' )	{
		print "<input type=text name=\"name\" size=20 maxlength=100 value=\"$c_name\" $css_style>\n";
	}	else	{
		print "$c_name" ;
	}
	print "</td>\n";
	print "<td bgcolor=#ff9900 nowrap>Email</td>\n";
	print "<td bgcolor=#ff9900><input type=text name=\"email\" size=26 maxlength=100 value=\"$c_email\" $css_style></td></tr>\n";
	print "<tr><td bgcolor=#ff9900 nowrap>参加の種類</td>\n";
	print "<td bgcolor=#ff9900><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=#ff9900 nowrap>メッセージ</td>\n";
	print "<td bgcolor=#ff9900><textarea name=\"com\" cols=$col rows=$row $css_style>$c_comment</textarea></td></tr>\n";
	print "<tr><td bgcolor=#ff9900 nowrap valign=top>パスワード</td>\n";
	print "<td bgcolor=#ff9900>\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 bgcolor=#ff9900>&nbsp;</td><td bgcolor=#ff9900><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 "<br><hr width=90% size=1 noshade color=#000000>\n";

	print "<br><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><font color=#ffffff>お名前</font></td>\n";
	print "<td bgcolor=#ff9900><font color=#ffffff>参加の種類</font></td>\n";
	print "<td bgcolor=#ff9900 width=60%><font color=#ffffff>メッセージ</font></td>\n";
	print "<td bgcolor=#ff9900 nowrap><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";
		$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=1>\n";

	print "<form action=\"$script\" method=\"$method\">\n";
	print "<font size=-1>編集・削除は、「お名前＋パスワード」を入力して、「編集か削除」を選択して、ボタンを押してね<br>\n";
	print "「メール送信」及び「お知らせ内容の変更」は管理者のみの機能\です。</font><br>\n";
	print "<select name=\"name\">\n";
	$no = 0 ;
	foreach $buf ( @data )	{ 
		($nm,$em,$sele,$cm,$pass,$dt) = split(/,/,$buf);
		print "<option value=\"$nm\">$nm\n";
	}
	print "</select>&nbsp;PASS:<input type=password name=\"pass\" size=10>\n";
	print "<select name=proc>\n";
	print "<option value=\"edit\">編集";
	print "<option value=\"delete\">削除";
	print "<option value=\"mlform\">メール送信"	if ( $sendmail && $sendflg2 == 1 )	;
	print "<option value=\"naiyoup\">お知らせ内容の変更";
	print "<option value=\"clear\">設定内容の初期化";
	print "</select>\n";
	print "<input type=hidden name=\"action\" value=\"maintenance\">\n";
	print "<input type=submit value=\"admin\">\n";
	print "<hr width=80% size=2>\n";
	print "</form></center>\n";	


}
###<--------------------------------------------------------------
###<---   ログ出力
###<--------------------------------------------------------------
sub	regist	{
	if ( $FORM{'name'} eq "" ) {	&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 = '' ; }
	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{'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 {
	&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 ;	#ファイルロック解除

	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,'euc');
	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,'euc');
					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=#ffff99>\n";
	print "<font size=2>$com</font>\n";
	print "<div align=center>\n";
	print "<form>\n";
	print "<INPUT TYPE=button VALUE=\"登録します\" ";
	print "onClick=\"location.href = \'$script?action=input\'\"></div>\n";
	print "</td></form></tr></table>\n";
	print "</td></tr></table>\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 ;
}

