#!/usr/bin/perl

#==========================================================
$ver = "WEB de アンケート v7.7";
# Cool and Cool http://www.coolandcool.net/
# しょういち    webmaster@coolandcool.net
#==========================================================

# jcode.plを同じフォルダに入れる。
require './jcode.pl';


#■ 基本設定_______________________________________________

# パスワード
$password = 'test';

# このcgiファイルを入れてるフォルダを絶対パスで（http://から）指定。最後の / は不要。
$stop_u = 'http://janus:8080/web_de';

# 戻り先。
$back_url = '../index.html';

# 画像ファイルを入れるフォルダ。最後の「/」は不要。
$icon_dir = '.';

# Location コマンドが使えないサーバーは次の設定を1に（通常は0）
$move_op = 0;


#■ ページ設定_____________________________________________

# タイトルタグ用
$master_title = 'Web de アンケート';

# ボディタグ
$master_body = "<body bgcolor=#FFFFFF text=#1D5EE4 link=#0000FF vlink=#0000FF alink=#0000FF>";

# タイトル
$bbs_title = "<p align=center><img src=$icon_dir/title.gif width=207 height=57></p>";

# コメント
$master_comment = ' お気軽に投票 / コメント投稿してください！';

# フォントサイズ（単位はポイント）
$font_size = '11';

# 表の幅
$table_width = '700';

# ラインカラー
$line_color = '#AAAAAA';

# グラフの最大長さ（１位のグラフの長さがここで設定した長さになります）
$line_width = '250';

# 締め切り時間超過カラー
$out_color = '#FF0000';

# コメント記事のヘッドマーク
$mark = "■";

# NEWマークを表示する時間（単位は時。0にすればつかなくなる。）
$ch_time = '48';


#■ 応用設定_______________________________________________
$auto_link = 1;			# 自動リンク (1=on 0=off)
				# ↓リンク置き換え文字
$link_mark = '[Click]';

# カウンター機能 (1=on 0=off)
$counter_sw = 1;

# コメント機能 (1=on 0=off)
$view_s = 1;

# コメントプレビュー (1=ランダム表示 2=最新表示 3=最古表示)
$view_h = 2;

# コメント投稿可能な最大文字数（この文字数を越えて投稿することはできない）
$c_max = 250;

# 一つの項目に対する最大保存コメント数（これを越えて投稿があるとその分古い記事が削除される）
$max = 500;

# コメント表示部のバックカラー
$back_color = "#EEEEEE";

# 匿名投稿の可否（0=匿名投稿不可、1=匿名投稿可）
$namechck = 1;

# 各ウインドウサイズ設定
$v_width  = 500;	# コメント表示ウインドウ横
$v_height = 500;	# コメント表示ウインドウ縦
$c_width  = 400;	# コメント投稿ウインドウ横
$c_height = 130;	# コメント投稿ウインドウフォーム表示欄縦
$l_height = 250;	# コメント投稿ウインドウ記事表示欄縦


#■ 広告設定_______________________________________________
$upcm = '';			# 上部に表示するCM
$dncm = '';			# 下部に表示するCM


#■ ファイル設定___________________________________________
$log_file    = 'log';		# ログファイルを入れるフォルダ
$access_file = 'access.cgi';	# アクセスログファイル
$count_file  = 'count.txt';	# カウンターファイル
$master_file = 'master.cgi';	# 設定ファイル


#■ メール通知設定_________________________________________
# （sendmailが使えないサーバーでは、通知メール機能は使えません。）
$mail_mode = 0;			# 書き込み通知 (1=on 0=off)

				# ↓通知先のメールアドレス
$mail_master  = 'xxxx@xxxx.com';
$post_cc = "";			# 追加でメール通知をしたいメールアドレス（不要の場合は空欄に）

				# ↓通知メールの題名
$mail_subject = "$master_title 通知メール";
				# ↓sendmailパス
$sendmail = '/usr/bin/sendmail';


#■ セキュリティー設定_____________________________________
$access_sw = 1;			# 投稿（アクセス）ログ保存 (1=投稿・投票のみ 2=表示も含む 0=off)
$access_n = "300";		# 保存するログ件数

$access_out = 0;		# 外部アクセス禁止 (1=on 0=off)
$access_deny = 1;		# アクセス拒否 (1=on 0=off)

				# ↓投稿禁止文字機能。次の文字列が投稿項目に含まれている場合は無視する（コメント文には非適応）。
@deny_word = ('ばか','あああ','死','aaa','eee');



#■ 設定ここまで___________________________________________



# 処理開始_________________________________________________
&decode;
if ( $access_deny eq "1" ) { &deny; }

if ( $_mode eq "vote" ) { &vote; }
if ( $_mode eq "com" ) { &input_form; }
if ( $_mode eq "form" ) { &form; }
if ( $_mode eq "regist" ) { &regist; }
if ( $_mode eq "cview" ) { &cview; }

if ( $_mode eq "system" && $id eq "m_system" ) { &m_system; }
if ( $_mode eq "m_system2" ) { &m_system2; }
if ( $_mode eq "chng_them" ) { &thm1; }
if ( $_mode eq "system" ) { &system; }
if ( $_mode eq "system2" ) { &system2; }
if ( $_mode eq "cview2" ) { &cview2; }
if ( $_mode eq "edit_form" ) { &edit_form; }
if ( $_mode eq "edit_com" ) { &edit_com; }
if ( $_mode eq "how" ) { &how; }

if ( $_mode eq "ip" ) { &ip; }
if ( $_mode eq "save_ip" ) { &save_ip; }
if ( $_mode eq "viewaccess" ) { &view_access; }

if ( $_mode eq "view" ) { &view; }
&int;
exit;


# オープニング_____________________________________________
sub int {
&master_read; &head;
$ms = $master_comment; $bu = $back_url;
$sw_b = 1; &title; &get_time;
if ( $access_sw eq "2" ) { $new_v="<font size=2>* トップページへアクセス</font>"; &access; }

print "<table width=550 border=1 cellspacing=0 cellpadding=5 align=center><tr><td align=center width=65%>テーマ</td><td align=center width=35%>投票〆切 <br><font size=2>（現在は $mon\/$mday $hour\:$min）</font></td></tr>\n";
foreach $master (@master) {
	($ord,$id,$them,$comm,$d1,$d2,$d3,$d4,$d5,$chk1) = split(/<>/,$master);
	if ( $them ne "" ) {
		print "<tr><td>\n<a href=web_de.cgi\?_mode=view\&id=$id>$them</a></td>\n<td>";
		if ( $d1 ne "" ) { print "$d1年 $d2月$d3日 $d4：$d5"; } else { print "なし"; }
		print "</td></tr>\n";
		}
	}
print "</table></center><BR><BR><BR>";
$id_r="m_system";
&copy;
exit;
}


# ページ表示_______________________________________________
sub view {
&master_read;
foreach $master (@master) {
	($ord,$id_r,$them,$comm,$d1,$d2,$d3,$d4,$d5,$chk1) = split(/<>/,$master);
	if ( $id eq $id_r ) { last; }
	}
$nowtime = time; if ( $access_sw eq "2" ) { &get_time; $new_v="<font size=2>* 「<a href=web_de.cgi?_mode=view&id=$id_r>$them</a>」へアクセス</font>"; &access; }

$h_height = $l_height + $c_height;
$js ="\n<script language=\"JavaScript\">\n<!--\n\nfunction viewwin(id,num) {\n\twindow.open(\"web_de.cgi\?id=\"+id+\"\&number=\"+num+\"\&_mode=cview\",\"_blank\",\"width=$v_width,height=$v_height,resizable=1,scrollbars=1\");\n\t}\n\nfunction comwin(id,num) {\n\twindow.open(\"web_de.cgi\?id=\"+id+\"\&number=\"+num+\"\&_mode=com\",\"_blank\",\"width=$c_width,height=$h_height,resizable=1\");\n\t}\n\n//-->\n</script>\n\n";

&head; &get_time;
$time_out = 0;
if ( $d1 ne "" ) {
	if ( $year > $d1 ) { $time_out = 1; } elsif ( $year == $d1) {
		if ( $mon > $d2 ) { $time_out = 2; } elsif ( $mon == $d2 ) {
			if ( $mday > $d3 ) { $time_out = 3; } elsif ( $mday == $d3) {
				if ( $hour > $d4 ) { $time_out = 4; } elsif ( $hour == $d4 ) {
					if ( $min >= $d5 ) { $time_out = 5; } 
					}
				}
			}
		}
	}
if ( $time_out ) { $time_msg ="<font color=$out_color><b>投票〆切が過ぎたので投票はできません。</b></font>"; } else { $time_msg ="投票〆切 <b>$d1年 $d2月$d3日 $d4：$d5</b>"; }

$mss="<table width=550 cellpadding=0 cellspacing=4 align=center><tr><td>&nbsp;テーマ：<b>$them</b></td></tr><tr><td bgcolor=$line_color background=\"$icon_dir/back_w.gif\"><img src=$icon_dir/space.gif width=5 height=2></td></tr><tr><td align=right>";
if ( $d1 ne "" ) { $mss="$mss \n $time_msg"; } else { $mss="$mss \n 投票〆切なし"; }
$mss="$mss</td></tr></table><BR>"; $ms = $comm;
if ( $pass ) { $mode_mssg="項目追加モード"; }
$bu='web_de.cgi?_mode=return'; &title; &log_read; &ready; &txt_read;

print "<form action=\"web_de.cgi\" method=\"post\"><input type=hidden name=\"_mode\" value=\"vote\"><input type=hidden name=\"id\" value=\"$id_r\"><p align=center>";
if ( $pass ) { print "<input type=hidden name=\"pass\" value=\"$pass\">"; }
if ( ( $chk1 && $time_out eq "0" ) || ( $pass eq $password ) ) { print "<b>新規項目投稿：</b><input typep=text name=\"new_v\" value=\"\" maxlength=80 size=20>　 （関連URL：<input typep=text name=\"url\" value=\"\" maxlength=100 size=16>）"; }
if ( !$time_out ) { print "<input type=submit value=　投票　>"; }
print "</p><table border=1 cellpadding=4 cellspacing=0 width=$table_width>\n<tr><td align=center width=5%>ランク</td>";
if ( $view_s ) { print "<td colspan=2 align=center width=35%>"; } else { print "<td align=center width=35%>" } 
print "項目</td><td colspan=2 align=center width=60%>票数 （全$total票中）</td></tr>";
$cookie_name = "web_de$id_r"; &get_cookie;

$m=1; srand(time^($$+($$<<15)));
foreach ( sort { ( $count{$b} <=> $count{$a} ) || ( $a cmp $b ) } keys(%count) ) {
	( $count{$_} eq $count_tmp ) || ( $rank1 = $rank2 );
	$cnt = $count{$_}; $title = $title{$_}; $number = $number{$_}; $url = $url{$_};
	if ( $title ) {
		print "<tr><td align=center width=5%>";
		if ( $COOKIE{"$number"} eq "" && $time_out eq "0" ) { print "<input type=checkbox name=\"$number\" value=\"$title\">"; }
		$per_v = ($cnt/$total)*100;
		if ( $rank1 eq "1" ) { $width = $line_width / $per_v; }
		$per_vs = $per_v*10; $per_vs = int($per_vs); $per_vs = $per_vs/10;
		if ( $url ) { $title = "<a href=\"$url\" target=_blank>$title</a>"; }
		print "$rank1</td><td width=35%><b>$title</b></td>";

		if ( $view_s ) { 
			@new_m = (); $imi = 0; $c_time = 0; $time_m = "見"; # ■■■通常マーク■■■
			foreach $loglines (@loglines) {
				($r_number,$r_com,$r_name,$r_url,$r_date,$r_host,$r_time) = split(/<>/,$loglines);
				if ( $r_number eq $number ) {
					if ( $auto_link ) { &make_link($r_com); }
					if ( $r_url ) { $r_mark = "<a href=$r_url target=_blank>$mark</a>"; } else { $r_mark = $mark; }
					push(@new_m,"$r_mark $r_com <B>$r_nameさん</b> ($r_date)\n"); $imi++;
					if ( $c_time < $r_time ) { $c_time = $r_time; }
				}
			}
			if ( ( $nowtime - $c_time ) < 60*60*$ch_time ) { $time_m = "!見"; } # ■■■NEWマーク■■■
			print "<td align=center><input type=button value=\" 書 \" onClick=\"comwin($id_r,$number)\">&nbsp;<input type=button value=\"$time_m($imi)\" onClick=\"viewwin($id_r,$number)\"></td>"; # ■■■書込ボタン■■■
		}

		print "<td width=15% align=right>$cnt ($per_vs％) </td><td width=45%><img src=$icon_dir/bar.gif width=" . int($per_v*$width) . " height=15 align=absmiddle></td>\n";

		if ( $view_s ) {
			if ( @new_m ) {
				if ( $view_h eq '1' ) {
					$rr = int(rand($imi)); $com = $new_m[$rr];
					print"<tr><td><BR></td><td colspan=4 bgcolor=$back_color><font size=2>$com</font>&nbsp;";
					} elsif ( $view_h eq '2' )  {
					print"<tr><td><BR></td><td colspan=4 bgcolor=$back_color><font size=2>$new_m[0]</font>&nbsp;";
					} elsif ( $view_h eq '3' )  {
					$imi = $imi - 1;
					print"<tr><td><BR></td><td colspan=4 bgcolor=$back_color><font size=2>$new_m[$imi]</font>&nbsp;";
					}
				print "</td>";
				}
			}
		print "</tr>";
		$count_tmp = $count{$_}; $rank2++;
		if ( $m > 4 ) { print "</table>";
			if ( !$time_out ) { print "<table width=$table_width><tr><td><input type=submit value=\"  投票  \"></td></tr></table>"; }
			print "<table border=1 cellpadding=4 cellspacing=0 width=$table_width>"; $m=0;
			}
		$m++;
		}
	}
print "</table></form></center><BR><BR>";
&copy;
exit;
}


# 投票処理_________________________________________________
sub vote {
if ( $access_out ) { &acc_chk; } &get_time;
&get_host; &log_read;
$cookie_name = "web_de$id"; &get_cookie;
$count_a = 0; $count_b = 0;

if ( $new_v ) {
	foreach $deny_w (@deny_word) {
		if ( $new_v =~ $deny_w ) { 
			$new_v = "$new_v (登録拒否)"; $count_b = 1; if ( $access_sw ) { &access; }
			&error("<BR><BR>投稿をお受けできません。<BR><BR>投稿した文字に、許可されていない文字が含まれていました。"); }# ■■■投稿拒否時メッセージ■■■
		}
	}

foreach $vote (@vote) {
	($number_v,$value_v) = split(/<>/,$vote);
	$num = $number_v - 1;
	($number,$count,$title,$date_v,$host1,$host2,$host3,$host4,$host5,$url_v) = split(/<>/,$lines[$num]);
	if ( $host ne $host1 && $host ne $host2 && $host ne $host3 && $host ne $host4 && $host ne $host5 && $COOKIE{$number} eq "" ) {
		$count++; $date_v = $date; $count_a++;
		} else { $count_b++; }
	$lines[$num] = "$number<>$count<>$title<>$date_v<>$host<>$host1<>$host2<>$host3<>$host4<>$url_v<>\n";
	}

if ( $new_v ) {
	$fault = 0;
	foreach $lines(@lines) {
		($number,$count,$title,$date_v,$host1,$host2,$host3,$host4,$host5,$url_v) = split(/<>/,$lines);
		if ( $new_v eq $title ) { $count_b++; $fault = 1; last; }
		}
	if ( !$fault ) {
		$lines[0] = $lines[0] + 1;
		push(@lines,"$lines[0]<>1<>$new_v<>$date<>$host<><><><><>$url<>\n"); $count_a++;
		push(@vote,"$lines[0]<>$new_v<>\n");
		$lines[0] = "$lines[0]\n";
		}
	}
if ( $access_sw ) { &access; }
&log_save;

&set_cookie;
$cookies = $ENV{'HTTP_COOKIE'};
	$cookies =~ s/\+/ /g;
	$cookies =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
@pairs = split(/;/,$cookies);
foreach $pair (@pairs) {
	($name, $value) = split(/=/, $pair);
	$name =~ s/ //g;
	$DUMMY{$name} = $value;
	}

$cookie_body=$DUMMY{"web_de$id"};
foreach $vote (@vote) {
	($number_v,$value_v) = split(/<>/,$vote);
	$cookie_body ="$cookie_body$number_v<>on\,";
	}
# chop $cookie_body;
$cookie_body =~ s/([^\w\=\& ])/'%' . unpack("H2", $1)/eg;
$cookie_body =~ tr/ /+/;
print "Set-Cookie: web_de$id=$cookie_body; expires=$date_gmt;\n";

$move_to = "$stop_u\/web_de.cgi\?_mode=view\&id=$id\&pass=$pass"; &move_to;
exit;
}


# =====コメント関係========================================

# コメントウインドウ_______________________________________
sub input_form {
print "Content-type: text/html\n\n";
print "<html><head>\n<meta http-equiv=\"Content-type\" content=\"text/html; charset=x-sjis\">\n";
print "<title>$master_title</title></head>";
print "<frameset rows=\"$c_height,*\" border=0 frameborder=0 framespacing=0 name=super>\n<frame src=\"web_de.cgi\?_mode=form\&number=$number\&id=$id\" name=\"form\">\n<frame src=\"web_de.cgi\?_mode=cview\&number=$number\&id=$id\&sw=on\" name=\"comm\">\n</frameset>";
print "\n<noframes>\n<body><p>　</p><p align=\"center\">フレーム未対応のブラウザではこの\機\能\は使えません。<BR>ブラウザの戻るボタンで前のページに戻り、通常\表\示\ボタンをクリックし、通常\表\示\モードでレスを入れてください。</p>";
print "<BR><BR><BR><BR><BR><BR></body>\n</noframes>\n</html>";
exit;
}


# コメント投稿フォーム_____________________________________
sub form {
$cookie_name = "CoolNoteForm"; &get_cookie;
$name = $COOKIE{"name"}; $url = $COOKIE{"url"};
$action = "<FORM name=input action=web_de.cgi method=post><input type=hidden name=_mode value=regist><input type=hidden name=id value=\"$id\"><input type=hidden name=number value=\"$number\">";
&input;
exit;
}


# 入力フォーム生成_________________________________________
sub input {
$js ="\n<script language=\"JavaScript\">\n<!--\nfunction FormChck(){\n\tcc=document.input;\n\t";
if ( !$namechck ) { $js = "$js if (cc.namef.value==\"\") {\n\t\twindow.alert(\"名前が入力されていません。\");\n\t\tcc.namef.focus();\n\t\treturn false;\n\t\t}\n\n"; }
$js = "$js if (cc.comm.value.length > $c_max) {\n\t\twindow.alert(\"投稿記事が長すぎます。\\n$c_max文字以内に押さえてください。\");\n\t\tcc.comm.focus();\n\t\treturn false;\n\t\t}\n\n\tif (cc.comm.value==\"\") {\n\t\twindow.alert(\"本文が入力されていません。\");\n\t\tcc.comm.focus();\n\t\treturn false;\n\t\t}\n\t}\n\n//-->\n</script>\n\n";
# ■■■↑↑入力チェックメッセージ■■■
&head;
if ( $mode_mssg ) { print "<table width=\"100\%\" border=0 cellpadding=1 cellspacing=0 bgcolor=#0066FF align=center><tr><td><font color=#FFFFFF size=2>&nbsp; $mode_mssg</font></td></tr></table><BR>"; }
print "$action";
print"<CENTER><table cellspacing=0 cellpadding=2 align=center border=1 width=370>";
print"<tr><td align=center>名前</td><td><font size=2><input type=text style=\"IME-MODE: active\" size=20 name=namef value=\"$name\" maxlength=20></font></td><td align=center>URL</td><td><input type=text size=20 name=url value=\"$url\"></td></tr>";
print"<tr>\n<td align=center>コメント</td><td colspan=3>\n<input type=text size=55 name=comm value=\"$comm\">\n</td>\n</tr>\n";
print"</table>\n<script language=JavaScript>\n<!--\ndocument.input.comm.focus();\n//-->\n</script>";
if ( $namechck ) { print "<font size=2>匿名投稿（無記名投稿）も可能\で\す。</font><BR>"; }# ■■■匿名投稿許可時■■■
print"<input onClick=\"return FormChck()\" type=submit value=\"　保存する　\">\n<input type=reset value=リセット>\n</CENTER></FORM>";
print "</body></html>";
}


# コメント保存プロセス_____________________________________
sub regist {
if ( $access_out ) { &acc_chk; }
&get_host; &txt_read; &get_time;

($r_number,$r_comm,$r_name,$r_url,$r_date,$r_host,$r_time) = split(/<>/,$loglines[0]);
if ( $r_comm eq $comm ) { &error("全く同じ内容の記事が存在します。<BR>処理を中止します。"); }
if ( !$namef ) { if ( $namechck ) { $namef = "匿名"; } else { error("名前を入力して下さい。"); } }
if ( !$comm ) { &error('コメントが入力されていません。'); }
if ( length($comm) > ( $c_max * 2 ) ) { &error("コメント文が長すぎます。<BR>全角$c_max文字以内におさめてください。"); }
$time = time; @same = (); @else = (); $many = 0;
foreach $f_loglines (@loglines) {
	($f_number,$f_comm,$f_name,$f_url,$f_date,$f_host,$f_time) = split(/<>/,$f_loglines);
	if ( $f_number eq $number ) { $many++; }
	}

if ( $many >= $max ) {
	if ( $view_h eq "3" ) { # ２番目に古い記事を削除
		foreach $loglines (@loglines) {
			($r_number,$r_comm,$r_name,$r_url,$r_date,$r_host,$r_time) = split(/<>/,$loglines);
			if ( "$number" eq "$r_number" ) { push(@same,$loglines); }
			else { push(@else,$loglines); }
			}
		$im = $#same; $dammy = @same[$im];
		pop(@same); pop(@same); @loglines = (); push (@loglines,@same); push (@loglines,$dammy); push(@loglines,@else);
		}
	else { # １番古い記事を削除
		foreach $loglines (@loglines) {
			($r_number,$r_comm,$r_name,$r_url,$r_date,$r_host,$r_time) = split(/<>/,$loglines);
			if ( $r_number eq $number ) { push(@same,$loglines) }
			else { push(@else,$loglines) }
			}
		pop(@same); @loglines = (); push (@loglines,@same); push(@loglines,@else);
		}
	}

unshift(@loglines,"$number<>$comm<>$namef<>$url<>$date<>$host<>$time<>\n");
&txt_save;
if ( $mail_mode ) { &mail_to; }
&set_cookie;
$cook="name<>$namef\,email<>$email\,url<>$url\,";
$cook =~ s/([^\w\=\& ])/'%' . unpack("H2", $1)/eg;
$cook =~ tr/ /+/;
print "Set-Cookie: CoolNoteForm=$cook; expires=$date_gmt\n";

$js = "\n<script language=\"JavaScript\">\n<!--\nsetTimeout(\"Closewin()\",1500);\nfunction Closewin() {\n\tparent.opener.location.href=\"web_de.cgi\?_mode=view\&id=$id\";\n\tparent.window.close();\n\t}\n//-->\n</script>\n";
&head;
print "<BR><p align=center>処理中…</p></body></html>";
exit;
}


# コメント表示_____________________________________________
sub cview {
&txt_read; &head;

&log_read;
foreach $lines (@lines) {
	($number_r,$count_r,$title,$date_r,$host1_r,$host2_r,$host3_r,$host4_r,$host5_r,$url_r) = split(/<>/,$lines);
	if ( $number eq $number_r ) { last; }
	}

if ( !$FORM{"sw"} ) {
	print "<table width=100% cellpadding=0 cellspacing=4 align=center><tr><td><b>$title</b> へのコメント</td></tr><tr><td bgcolor=$line_color background=\"$icon_dir/back_w.gif\"><img src=$icon_dir/space.gif width=5 height=2></td></tr></table>";
	}

print "<table width=100% border=0 align=center><tr><td><p>";
if ( $FORM{"sw"} ) { print "<font size=2>"; }
$i= 0;
foreach $loglines (@loglines) {
	($r_number,$r_com,$r_name,$r_url,$r_date,$r_host,$r_time) = split(/<>/,$loglines);
	if ( $r_number eq $number ) {
		if ( $r_url ) { $r_mark = "<a href=$r_url target=_blank>$mark</a>"; } else { $r_mark = $mark; }
		if ( $auto_link ) { &make_link($r_com); }
		push(@new_m,"&nbsp; $r_mark $r_com <b>$r_nameさん</b> ($r_date)<hr size=1>"); $i++; # ■■■コメント表示フォーム■■■
		}
	}
if ( !$i ) { print "<div align=center><BR><BR>まだコメントはありません。</div>"; } else { print @new_m; }
if ( $FORM{"sw"} ) { print "</font>"; }
print "</p></td></tr></table><BR>";
if ( !$FORM{"sw"} ) {
	print "<div align=center><input type=button value=\"　閉じる　\" onClick=window.close();></div><BR><BR>";
	}
print "</body></html>";
exit;
}


# コメント表示編集用_______________________________________
sub cview2 {
if ( $pass ne $password ) { &error("パスワードが異なります。"); }

&txt_read; &head;
print "<table width=\"100\%\" border=0 cellpadding=1 cellspacing=0 bgcolor=#0066FF align=center><tr><td><font color=#FFFFFF size=2>&nbsp; 編集したい記事をクリックするか、削除したい記事にチェックを入れ削除ボタンをクリックします。</font></td></tr></table><BR>";
&log_read;
foreach $lines (@lines) {
	($number_r,$count_r,$title,$date_r,$host1_r,$host2_r,$host3_r,$host4_r,$host5_r,$url_r) = split(/<>/,$lines);
	if ( $number eq $number_r ) { last; }
	}

print "<FORM name=input action=web_de.cgi method=post><input type=hidden name=_mode value=edit_com><input type=hidden name=id value=\"$id\"><input type=hidden name=number value=\"$number\"><input type=hidden name=pass value=\"$pass\"><table width=100% border=0 align=center><tr><td>";
$i= 0;
foreach $loglines (@loglines) {
	($r_number,$r_com,$r_name,$r_url,$r_date,$r_host,$r_time) = split(/<>/,$loglines);
	if ( $r_number eq $number ) {
		if ( length($r_com) > 100 ) { $r_com = substr($r_com,0,100); $r_com = "$r_com ..."; }
		push(@new_m,"&nbsp; <b>[ <a href=web_de.cgi\?_mode=edit_form\&r_time=$r_time\&id=$id\&number=$number\&pass=$pass>この記事を編集</a> ] [<input type=checkbox name=del_$r_time value=on>削除]</b>&nbsp; $r_com <b> $r_nameさん [$r_host]</b> ($r_date)<hr size=1>"); $i++;
		}
	}
if ( !$i ) { print "<div align=center><BR>まだコメントはありません。<BR><BR></div>"; } else { print @new_m; }
print "</td></tr></table>";
print "<div align=center><input type=submit value=\"　削除実行　\"> <input type=button value=\"　閉じる　\" onClick=window.close();></div></form><BR><BR>";
print "</body></html>";
exit;
}


# コメント編集フォーム_____________________________________
sub edit_form {
if ( $pass ne $password ) { &error("パスワードが異なります。"); }

$mode_mssg="記事編集モード"; &txt_read;
foreach $loglines (@loglines) {
	($r_number,$comm,$name,$url,$r_date,$r_host,$r_time) = split(/<>/,$loglines);
	if ( $FORM{"r_time"} eq $r_time ) { last; }
	}
$action = "<FORM name=input action=web_de.cgi method=post><input type=hidden name=_mode value=edit_com><input type=hidden name=id value=\"$id\"><input type=hidden name=number value=\"$number\"><input type=hidden name=r_time value=\"$r_time\"><input type=hidden name=pass value=\"$pass\">";
&input;
exit;
}


# コメント編集処理_________________________________________
sub edit_com {
if ( $pass ne $password ) { &error("パスワードが異なります。"); }

&get_time; &txt_read;
foreach $loglines (@loglines) {
	($r_number,$r_comm,$r_name,$r_url,$r_date,$r_host,$r_time) = split(/<>/,$loglines);
	if ( $FORM{"r_time"} eq $r_time ) { $r_comm = $comm; $r_name = $namef; $r_url = $url; $r_date = $date; }
	if ( !$FORM{"del_$r_time"} ) { push (@new,"$r_number<>$r_comm<>$r_name<>$r_url<>$r_date<>$r_host<>$r_time<>\n"); }
	}

@loglines = @new;
&txt_save;
&cview2;
}


# =====管理機能============================================

# 設定データー編集_________________________________________
sub m_system {
if ( $pass ne $password ) { &error("パスワードが異なります。"); }

&master_read; &head; &get_time;
$mode_mssg = "管理モード （現在 <b>$mon\/$mday $hour\:$min</b>）";
$ms="・ <b>新規でテーマを作るには（テーマを増やすには）、</b>空欄となっている入力欄に新しいテーマやコメントを入力し、保存ボタンをクリックしてください。<BR>・ <b>既存のテーマを変更するには、</b>必要に応じて「ログクリア」をクリックし、ログファイルをクリアしてから、テーマやコメントを書き直し、保存ボタンをクリックして保存してください。<BR>・ <b>テーマを削除するには、</b>「テーマ名」の欄を空欄にしてから保存ボタンをクリックしてください。<BR>・ 締め切り日時の「年」の入力欄を空欄にすると締め切りを利用しなくなります。"; $bu='web_de.cgi?_mode=dummy'; &title;

print "<form action=\"web_de.cgi\" method=\"post\"><input type=hidden name=\"_mode\" value=\"m_system2\"><input type=hidden name=\"pass\" value=\"$pass\">";
print "<p align=center><input type=submit value=\"   保存する   \"> <input type=reset value=リセット></p>";
print "<table border=\"1\" cellspacing=\"0\" cellpadding=\"4\" width=600><tr align=center>\n";
print "<td>順</td><td>テーマ名 / コメント</td><td>締め切り日時</td><td>新規項目</td><td>各種\機\能\</td></tr>\n";

unshift(@master,"\n"); $max = @master; $m = 1;
for ( $i=0; $i<$max; ++$i ) {
	($ord,$id,$them,$comm,$d1,$d2,$d3,$d4,$d5,$chk1) = split(/<>/,$master[$i]);
	print "<tr><td><input type=text name=\"ord_$i\" value=\"$i\" size=3></td><td width=45%><input type=hidden name=\"id_$i\" value=\"$id\"><input type=text name=\"them_$i\" size=30 value=\"$them\"><BR><textarea name=\"comm_$i\" cols=30 rows=3>$comm</textarea></td>\n";
	print "<td width=25%><input type=text name=\"d1_$i\" size=6 maxlength=4 value=\"$d1\">年<BR> <input type=text name=\"d2_$i\" size=4 maxlength=2 value=\"$d2\">月 <input type=text name=\"d3_$i\" size=4 maxlength=2 value=\"$d3\">日<br>\n";
	print "<input type=text name=\"d4_$i\" size=4 maxlength=4 value=\"$d4\">時 <input type=text name=\"d5_$i\" size=4 maxlength=2 value=\"$d5\">分</td>\n<td width=15%>";
	if ( $chk1 ) { print "<input type=checkbox name=\"chk1_$i\" value=\"on\" checked>自由</td>"; } else { print "<input type=checkbox name=\"chk1_$i\" value=\"on\">自由</td>"; }
	print "<td align=center width=15%><font size=2>[ <a href=web_de.cgi\?_mode=system\&id=$id\&pass=$pass>ログ編集</a> ]<BR>[ <a href=web_de.cgi\?_mode=view\&id=$id\&pass=$pass>項目追加</a> ]<BR><BR>[ <a href=web_de.cgi\?_mode=chng_them\&id=$id\&pass=$pass>ログクリア</a> ]</font></td></tr>";
	if ( $m > 2 ) { print "</table><p align=center><input type=submit value=\"   保存する   \"> <input type=reset value=リセット></p><table border=1 cellpadding=4 cellspacing=0 width=600>"; $m=0; }
	$m++;
	}
print "</table></form></center><BR><BR>\n";
$id_r="m_system";
&copy;
exit;
}


# 設定データー変更処理_____________________________________
sub m_system2 {
if ( $pass ne $password ) { &error("パスワードが異なります。"); }

&master_read; @new = (); unshift(@master,"\n"); $max = @master;
for ( $i=0; $i<$max; ++$i ) {
	($ord_r,$id_r,$them,$comm,$d1,$d2,$d3,$d4,$d5,$chk1) = split(/<>/,$master[$i]);
	$them=$FORM{"them_$i"}; $comm=$FORM{"comm_$i"}; $d1=$FORM{"d1_$i"}; $d2=$FORM{"d2_$i"}; $d3=$FORM{"d3_$i"}; $d4=$FORM{"d4_$i"}; $d5=$FORM{"d5_$i"}; $chk1=$FORM{"chk1_$i"}; $ord = $FORM{"ord_$i"};

	if ( $them ) {
		if ( $id_r eq "" ) {
			$id_r = time; $file_name = "$id_r\.cgi";
			open(LOG,">$log_file\/$file_name") || &error("ログファイル$file_nameが開けません。");
			print LOG "0\n";
			close(LOG);
			chmod(0666,"$log_file\/$file_name");
			$file_name = "txt$id_r\.cgi";
			open(LOG,">$log_file\/$file_name") || &error("ログファイル$file_nameが開けません。");
			print LOG "";
			close(LOG);
			chmod(0666,"$log_file\/$file_name");
			}
		push(@new,"$ord<>$id_r<>$them<>$comm<>$d1<>$d2<>$d3<>$d4<>$d5<>$chk1<>\n");
		}
	elsif ( $id_r ) { unlink("$log_file\/$id_r\.cgi"); unlink("$log_file\/txt$id_r\.cgi"); }
	}

@new = sort { $a <=> $b } @new;
open(LOCK,">$log_file/ctrl.lock");
eval { flock(LOCK,2); };
open(LOG,">$master_file") || &error("設定ファイル$master_fileに書き込めません。");
print LOG @new;
close(LOG);
unlink("$log_file/ctrl.lock");
eval { flock(LOCK,8); };
close(LOCK);
&m_system;
}


# 項目データー編集_________________________________________
sub system {
if ( $pass ne $password ) { &error("パスワードが異なります。"); }

&master_read; &log_read;
$js ="\n<script language=\"JavaScript\">\n<!--\n\nfunction editwin(id,num) {\n\twindow.open(\"web_de.cgi\?_mode=cview2\&id=\"+id+\"\&number=\"+num+\"\&pass=$pass\",\"_blank\",\"width=$v_width,height=$v_height,resizable=1,scrollbars=1\");\n\t}\n\n//-->\n</script>\n\n";
&head;
$mode_mssg ='ログ編集モード';
$ms="削除したい項目にチェックを入れます。変更したい箇所は直接入力します。最後に、[変更する]ボタンを押すと、変更が反映されます。コメントを編集したい場合はコメント編集をクリックします。"; $bu="web_de.cgi\?_mode=view\&id=$id"; &title;

&ready; &txt_read;
print "<form action=\"web_de.cgi\" method=\"post\"><input type=hidden name=\"_mode\" value=\"system2\"><input type=hidden name=\"pass\" value=\"$pass\"><input type=hidden name=\"id\" value=\"$id\">";
print "<p align=center><input type=submit value=\"  変更する  \"> <input type=reset value=リセット></p>";
print "<table border=1 cellpadding=4 cellspacing=0 width=500>\n<tr><td width=10% align=center>削除</td><td width=30% align=center>項目名</td><td width=30% align=center>関連URL</td><td width=30% align=center>票数 （全$total票中）</td></tr>";

$m=1;
foreach ( sort { ($count{$b} <=> $count{$a} ) || ( $a cmp $b ) } keys(%count) ) {
	( $count{$_} eq $count_tmp ) || ( $rank1 = $rank2 );
	$cnt = $count{$_}; $title = $title{$_}; $number = $number{$_}; $url = $url{$_};
	if ( $title ) {
		print "<tr><td align=center width=10% align=center>";
		print "<input type=checkbox name=\"del_$number\" value=\"on\">";
		$per_v = ($cnt/$total)*100;
		$per_vs = $per_v*100; $per_vs = int($per_vs); $per_vs = $per_vs/100;
		print "$rank1</td><td width=30% align=center><input type=text name=\"tit_$number\" value=\"$title\" size=20>";

		if ( $view_s ) { 
			@new_m = (); $imi = 0;
			foreach $loglines (@loglines) {
				($r_number,$r_com,$r_name,$r_url,$r_date,$r_host,$r_time) = split(/<>/,$loglines);
				if ( $r_number eq $number ) { $imi++; }
				}
			if ( $imi ) { print "<input type=button onClick=editwin($id,$number) value=コメント編集($imi)>"; }
			}

		print "</td><td width=30% align=center><input type=text name=\"url_$number\" value=\"$url\" size=15></td><td align=center width=30% align=center><input type=text name=\"cnt_$number\" value=\"$cnt\" size=5> （$per_vs％）</td></tr>\n";
		$count_tmp = $count{$_}; $rank2++;
		if ( $m > 4 ) { print "</table><BR><center><input type=submit value=\"  変更する  \"> <input type=reset value=リセット></center><BR><table border=1 cellpadding=4 cellspacing=0 width=500>"; $m=0; }
		$m++;
		}
	}
print "</table></form></center><BR><BR>";
&copy;
exit;
}


# 項目データー変更処理_____________________________________
sub system2 {
if ( $pass ne $password ) { &error("パスワードが異なります。"); }

&master_read; &log_read;
@news = (); $i = 0;
foreach $lines (@lines) {
	($number,$count,$title,$date_v,$host1,$host2,$host3,$host4,$host5,$url) = split(/<>/,$lines);
	$new_cnt = $FORM{"cnt_$number"}; $new_tit = $FORM{"tit_$number"}; $new_url = $FORM{"url_$number"};
	if ( $FORM{"del_$number"} eq "on" ) { $new_tit=""; }
	if ( $i eq 0 ) { push(@news,$lines); } else {
	push(@news,"$number<>$new_cnt<>$new_tit<>$date_v<>$host1<>$host2<>$host3<>$host4<>$host5<>$new_url<>\n"); }
	$i++;
	}
@lines = @news; &log_save;
$_mode = "view"; $pass = ""; &view;
exit;
}


# 項目ファイル・コメントファイルクリア_____________________
sub thm1 {
if ( $pass ne $password ) { &error("パスワードが異なります。"); }

&master_read;
foreach $master (@master) {
	($ord,$id_r,$them,$comm,$d1,$d2,$d3,$d4,$d5,$chk1) = split(/<>/,$master);
	if ( $id eq $id_r ) { last; }
	}

$file_name = "$id\.cgi";
open(LOCK,">$log_file/$id\.lock");
eval { flock(LOCK,2); };
open(LOG,">$log_file\/$file_name") || &error("ログファイル$file_nameが開けません。");
print LOG "0\n";
close(LOG);
unlink("$log_file/$id\.lock");
eval { flock(LOCK,8); };
close(LOCK);

$file_name = "txt$id\.cgi";
open(LOCK,">$log_file/txt$id\.lock");
eval { flock(LOCK,2); };
open(LOG,">$log_file\/$file_name") || &error("ログファイル$file_nameが開けません。");
print LOG "";
close(LOG);
unlink("$log_file/txt$id\.lock");
eval { flock(LOCK,8); };
close(LOCK);

&head;
$mode_mssg = "ログファイルクリア";
$ms="テーマ「$them」のログファイルをクリアしました。<a href=web_de.cgi?_mode=system&pass=$pass&id=m_system>ここをクリック</a>すると管理画面に戻ります。<BR><BR><BR><BR><BR>";
$bu='web_de.cgi?_mode=dummy';
&title; &copy; exit;
}


# =====アクセス関連処理====================================

# 不正アクセスチェック_____________________________________
sub acc_chk {
$ref_url = $ENV{'HTTP_REFERER'};
$ref_url =~ s/\?(.|\n)*//ig; $ref_url =~ s/\%7E/\~/ig;
if ( $ref_url !~ $stop_u ) { &error("許可されたURL以外からの不正アクセスを感知しました。"); }
}


# アクセス拒否処理_________________________________________
sub deny {
&get_access;
foreach $lines (@lines) {
	$lines =~ s/\n//g;
	if ( $ENV{'REMOTE_HOST'} =~ /$lines/ || $ENV{'REMOTE_ADDR'} =~ /$lines/ ) { &error("現在、メンテナンス中です。<BR><BR>しばらくお待ち下さい。"); }
	}
}


# アクセス拒否設定編集_____________________________________
sub ip {
if ( $pass ne $password ) { &error("パスワードが異なります。"); }

&head;
$mode_mssg ='アクセス拒否設定モード';
$ms="　固定IPでアクセスしている人（常にIPアドレスの数字が不変の人）を排除する場合はIPアドレスの数字全て（127.203.43.205など）を、それ以外の場合はIPアドレスの最初の３つの数字（127.203.48.など）を入力してください。<BR><BR>１回で設定できるのは３個までです。不要部分は空欄にしてください。３個以上設定する場合は設定後に再び設定してください。</font></p>"; $bu="web_de.cgi?_mode=return"; &title;

print "<form action=\"web_de.cgi\" method=\"post\"><input type=hidden name=\"_mode\" value=\"save_ip\"><input type=hidden name=\"pass\" value=\"$pass\">";
&get_access;

$m=1; $i=0;
print "<table border=1 align=center cellpadding=6 cellspacing=0 width=300>";
foreach $line (@lines) {
	chop($line);
	print "<tr><td><input type=\"text\" name=\"ip$i\" maxlength=\"20\" value=\"$line\"></td></tr>";
	$m++; $i++;
	if ( $m > 10 ) { print "</table><table border=1 align=center cellpadding=6 cellspacing=0 width=300>"; $m=1; }
	}
print "</table><BR><input type=submit value=\"保存する\"><input type=reset value=\"リセット\"></form></center><BR><BR><BR><BR>";
&copy;
exit;
}


# アクセス拒否設定保存_____________________________________
sub save_ip {
if ( $pass ne $password ) { &error("パスワードが異なります。"); }

$n=0;
for ( $i=0; $i<3; ) {
	if ( $FORM{"ip$n"} eq "" ) { $i++; }
	$ip[$n] = $FORM{"ip$n"};
	$data_ip = "$data_ip$ip[$n]\n";
	$n++;
	}

chop($data_ip);
open(DB,">deny.cgi") || &error("アクセス拒否設定ファイルが開けません。");
eval 'flock(DB,2);';
print DB "$data_ip\n";
eval 'flock(DB,8);';
close(DB);
&view_access;
}


# アクセスログ記録_________________________________________
sub access {
&get_accesslog;
if ( $#access >= $access_n ) { pop (@access); }
open(LOCK,">$log_file/access.lock");
eval { flock(LOCK,2); };
open(AC,">$access_file") || &error("アクセスログファイルに書き込めません。");
print AC "$date,$ENV{'REMOTE_HOST'},($ENV{'REMOTE_ADDR'}),$ENV{'HTTP_USER_AGENT'},$count_a,$count_b,$new_v\n";
print AC @access;
close (AC);
unlink("$log_file/access.lock");
eval { flock(LOCK,8); };
close(LOCK);
}


# アクセスログ表示_________________________________________
sub view_access {
if ( $pass ne $password ) { &error("パスワードが異なります。"); }
&get_accesslog;

&head;
$mode_mssg ='アクセス情報確認モード';
$ms="　全ての投票記録です。投票者の投票時間、IPアドレス、有効投票数と無効投票数、さらに、投票した新規項目内容が\表\示されます。なお、無効投票は、必ずしも悪意でなされたとは限らないので注意してください。"; $bu='web_de.cgi?_mode=return'; &title;

print "<table border=1 align=center cellpadding=6 cellspacing=0 width=90%>";
print "<tr><td width=15%>日時</td><td width=15%>ホスト情報</td><td width=30%><font size=2>エージェント情報</font></td><td width=5%>有効</td><td width=5%>無効</td><td width=30%>新規項目投票</td></tr>";
$m='0';
foreach $access(@access) {
	$m++;
	($rdate,$rhost,$rip,$ragent,$ra,$rb,$rnew) = split(/\,/,$access);
	if ( $rnew eq "\n" ) { $rnew="<BR>"; }
	print "<tr><td width=15%>$rdate</td><td width=15%>$rhost<BR>$rip</td><td width=30%><font size=2>$ragent</font></td><td width=5%>$ra</td><td width=5%>$rb</td><td width=30%>$rnew</td></tr>";
	if ( $m > 10 ) { print "</table><table border=1 align=center cellpadding=6 cellspacing=0 width=90%>"; $m=1; }
	}
print "</table></center><BR><BR>";
&copy;
exit;
}


# =====ファイル操作========================================

# 設定ファイル読み込み_____________________________________
sub master_read {
open(LOCK,">$log_file/ctrl.lock");
eval { flock(LOCK,2); };
open(LOG,"$master_file") || &error("設定ファイルが開けません。");
@master = <LOG>;
close(LOG);
unlink("$log_file/ctrl.lock");
eval { flock(LOCK,8); };
close(LOCK);
}


# ログファイル読み込み_____________________________________
sub log_read {
open(LOCK,">$log_file/$id\.lock");
eval { flock(LOCK,2); };
$file_name = "$id\.cgi";
open(LOG,"$log_file\/$file_name") || &error("ログファイル$file_nameが開けません。");
@lines = <LOG>;
close(LOG);
unlink("$log_file/$id\.lock");
eval { flock(LOCK,8); };
close(LOCK);
}


# ログファイル書き込み_____________________________________
sub log_save {
open(LOCK,">$log_file/$id\.lock");
eval { flock(LOCK,2); };
$file_name = "$id\.cgi";
open(LOG,">$log_file\/$file_name") || &error("ログファイル$file_nameに書き込めません。");
print LOG @lines;
close(LOG);
unlink("$log_file/$id\.lock");
eval { flock(LOCK,8); };
close(LOCK);
}


# ログテキストファイル読み込み_____________________________
sub txt_read {
open(LOCK,">$log_file/txt$id\.lock");
eval { flock(LOCK,2); };
$file_name = "txt$id\.cgi";
open(LOG,"$log_file\/$file_name") || &error("ログファイル$file_nameが開けません。");
@loglines = <LOG>;
close(LOG);
unlink("$log_file/txt$id\.lock");
eval { flock(LOCK,8); };
close(LOCK)
}


# ログテキストファイル書き込み_____________________________
sub txt_save {
open(LOCK,">$log_file/txt$id\.lock");
eval { flock(LOCK,2); };
$file_name = "txt$id\.cgi";
open(LOG,">$log_file\/$file_name") || &error("ログファイル$file_nameに書き込めません。");
print LOG @loglines;
close(LOG);
unlink("$log_file/txt$id\.lock");
eval { flock(LOCK,8); };
close(LOCK)
}


# アクセス設定ファイル読み込み_____________________________
sub get_access {
open(DB,"deny.cgi") || &error("アクセス設定ファイルが開けません。");
@lines = <DB>;
close(DB);
}


# アクセスログファイル読み込み_____________________________
sub get_accesslog {
open(LOCK,">$log_file/access.lock");
eval { flock(LOCK,2); };
open(AC,"$access_file") || &error("アクセスログファイルが開けません。");
@access = <AC>;
close (AC);
unlink("$log_file/access.lock");
eval { flock(LOCK,8); };
close(LOCK);
}


# =====サブルーチン========================================

# 文字デコード_____________________________________________
sub decode {
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }
else { $buffer = $ENV{'QUERY_STRING'}; }
@pairs = split(/&/,$buffer); @vote = ();
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/</&lt;/g;
	$value =~ s/>/&gt;/g;
	if ( $name ne "_mode" && $name ne "id" && $name ne "new_v" && $name ne "pass" && $name ne "url" ) {
		push(@vote,"$name<>$value<>\n");
		}
	$FORM{$name} = $value;
	}
$_mode=$FORM{'_mode'}; $id = $FORM{"id"};
$namef = $FORM{"namef"}; $comm = $FORM{"comm"};
$number = $FORM{"number"}; $url = $FORM{"url"};
$title = $FORM{"title"}; $pass = $FORM{'pass'};
$new_v = $FORM{'new_v'};
}

# ホスト取得_______________________________________________
sub get_host {
$host = $ENV{'REMOTE_HOST'}; $addr = $ENV{'REMOTE_ADDR'};
if ($host eq "" || $host eq $addr) { $host = gethostbyaddr(pack('C4',split(/\./,$host)),2) || $addr; }
}


# 現在日時取得_____________________________________________
sub get_time {
$ENV{'TZ'} = "JST-9";
($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(time);
$mon++;
$year = $year + 1900;
if ( $mon < 10 )  { $mon  = "0$mon"; }
if ( $mday < 10 ) { $mday = "0$mday"; }
if ( $hour < 10 ) { $hour = "0$hour"; }
if ( $min < 10 )  { $min  = "0$min"; }
if ( $sec < 10 )  { $sec  = "0$sec" }
$date = "$mon\/$mday $hour\:$min\<!--$sec-->";
}


# カウンター処理___________________________________________
sub counter {
open(LOCK,">$log_file\/count.lock");
eval { flock(LOCK,2); };
open(CN,"$count_file") || &error("カウンターファイルが開けません。");
$cnt = <CN>;
close(CN);
if ( !$_mode ) {
	$cnt++;
	open(TMP,">count_tmp") || &error("カウンター一時ファイルに書き込めません。");
	print TMP $cnt;
	close(TMP);
	rename("count_tmp","$count_file") || &error("カウンターファイルに書き込めません。");
	}
unlink("$log_file/count.lock");
eval { flock(LOCK,8); };
close(LOCK);

print "<div align=right><font size=2>";
while(length($cnt) < 4){ $cnt = 0 . $cnt; }
@cnts = split(//,$cnt);
foreach (0 .. $#cnts) {
	print "$cnts[$_]";
	}
print "</font></div>";
}


# 統計準備処理_____________________________________________
sub ready {
$i=0;
foreach $lines (@lines) {
	($number,$count,$title,$date_v,$host1,$host2,$host3,$host4,$host5,$url) = split(/<>/,$lines);
	$count{$title} = $count; $title{$title} = $title; $url{$title} = $url;
	$number{$title} = $number; if ( $title{$title} ) { $total+=$count; }
	$i++;
	}
$rank1 = 0; $rank2 = 1; $count_tmp = 0;
}


# 自動リンク処理___________________________________________
sub make_link {
$_[0] =~ s/([^=^\"]|^)(http\:[\w\.\,\~\/\?\+\-\=\:\;\!\@\#\$\^\&\%\\]+)/$1<a href=$2 target=\"_blank\">$link_mark<\/a>/g;
}


# ヘッダ表示_______________________________________________
sub head {
print "Content-type: text/html\n\n";
print "<html><head>\n<meta http-equiv=\"Content-type\" content=\"text/html; charset=x-sjis\">\n";
print "$js";
print "\n<style type=\"text/css\">\n<!--\ntd, p {font-size:" . $font_size ."pt; line-height:1.4 }\n-->\n</style>\n";
print "<title>$master_title</title>\n</head>$master_body\n";
}


# タイトル・コメント表示___________________________________
sub title {
print "$upcm";
print "<table border=0 width=100%><tr><td width=70%>";
if ( $sw_b ) { print "[ <a href=\"$bu\" target=\"_top\">戻る</a> ] [ <a href=\"web_de.cgi\?_mode=how\" target=\"_blank\">使い方</a> ]"; } else { print "[ <a href=\"$bu\">戻る</a> ] [ <a href=\"web_de.cgi\?_mode=how\" target=\"_blank\">使い方</a> ]"; }
if ( $pass ) { print " [ <a href=web_de.cgi?pass=$pass&_mode=viewaccess>アクセス情報確認</a> ] [ <a href=web_de.cgi?pass=$pass&_mode=ip>アクセス拒否設定</a> ]</td><td width=30% align=right>"; }
if ( $counter_sw && !$sw_a ) { &counter; } else { print "<BR>"; }
print "</td></tr></table>\n";
print "$bbs_title";
if ( $mode_mssg ) { print "<table width=\"90\%\" border=0 cellpadding=1 cellspacing=0 bgcolor=#0066FF align=center><tr><td><font color=#FFFFFF size=2>&nbsp; $mode_mssg</font></td></tr></table><BR>"; }
if ( $ms ) { print "$mss<table border=0 width=550 align=center><tr><td><p>$ms</p></td></tr></table><center><BR>\n"; }
}


# クッキー取得_____________________________________________
sub get_cookie { 
$cookies = $ENV{'HTTP_COOKIE'};
	$cookies =~ s/\+/ /g;
	$cookies =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
@pairs = split(/;/,$cookies);
foreach $pair (@pairs) {
	($name, $value) = split(/=/, $pair);
	$name =~ s/ //g;
	$DUMMY{$name} = $value;
	}
@pairs = split(/,/,$DUMMY{"$cookie_name"});
foreach $pair (@pairs) {
	($name, $value) = split(/<>/, $pair);
	$COOKIE{$name} = $value;
	}
}


#クッキー発行______________________________________________
sub set_cookie { 
($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg) = gmtime(time + 365*24*60*60);
$yearg += 1900;
if ($secg < 10)  { $secg  = "0$secg"; }
if ($ming < 10)  { $ming  = "0$ming"; }
if ($hourg < 10) { $hourg = "0$hourg"; }
if ($mdayg < 10) { $mdayg = "0$mdayg"; }
$month = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')[$mong];
$youbi = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday')[$wdayg];
$date_gmt = "$youbi, $mdayg\-$month\-$yearg $hourg:$ming:$secg GMT";
}


# 書き込み通知_____________________________________________
sub mail_to {
&master_read;
foreach $master (@master) {
	($ord_r,$id_r,$them_r,$comm_r,$d1_r,$d2_r,$d3_r,$d4_r,$d5_r,$chk1_r) = split(/<>/,$master);
	if ( $id eq $id_r ) { last; }
	}

&log_read;
foreach $lines (@lines) {
	($number_f,$count_f,$title_f,$date_f,$host1_f,$host2_f,$host3_f,$host4_f,$host5_f,$url_f) = split(/<>/,$lines);
	if ( $number eq $number_f ) { last; }
	}

$mail_c = $comm; $mail_c =~ s/<br>/\n/g;
# $mail_c =~ s/<[^>]*>//g;
$name_c = "投稿者：$namefさん($host)";
if ( $url ) { $name_c = "$name_c\nURL：$url"; }

# ■■■ 通知メール文章 ■■■
$mail_body = "テーマ：$them_r\n項目：$title_f\nに対するコメント。\n\n$mail_c\n\n投稿日：$date\n$name_c\n----------\nこのメールは「$master_title」\n（$stop_u\/web_de.cgi）\nから自動送信されています。\n\n";
&jcode'convert(*mail_subject,'jis');
&jcode'convert(*mail_body,'jis');

if (open(MAIL,"| $sendmail -t")) {
	print MAIL "X-Mailer: Web_de \n";
#	print MAIL "Errors-To: $mail_master\n";
	print MAIL "To: $mail_master\n";
	if ( $post_cc ) { print MAIL "Cc: $post_cc\n"; }
	print MAIL "From: $mail_master\n";
	print MAIL "Subject: $mail_subject\n";
	print MAIL "Content-Transfer-Encoding: 7bit\n";
	print MAIL "Content-type: text/plain\n\n";
	print MAIL "$mail_body";
	close(MAIL);
	}
}


# 解説表示_________________________________________________
sub how{
&head;
print "<p align=\"center\">$master_title の 使い方</p><hr>\n";
print "<form><table width=520 border=0 align=center><tr><td>\n";
print "<p>■ 注意事項</p><p>・　このアンケートスクリプトはJavaScriptを利用しているので、最低でも Internet Explorer 3.0以上、NetscapeCommunicator 3.0以上、もしくはそれと同等のブラウザが必要です。バージョン4.0以上のブラウザを推奨します。</p><p>　</p>\n";

print "<p>■ 投票について</p><p>・　トップページから興味のあるテーマをクリックしてください。すると、各テーマのアンケートページが\表\示されます。</p>\n";
print "<p>・　各テーマごとに「投票〆切」が設定されていることがあります。その場合、〆切日をすぎると投票ができなくなるのでご注意下さい（結果を見ることはできます）。</p>\n";
print "<p>・　投票したい項目のチェックボックスをクリックし、チェックを入れ、<input type=\"button\" value=\"投票\"> ボタンをクリックすることで、１票投じることができます。複数項目へ投票できますが、投票できるのは１項目に対し１票のみです。既に投票した項目はチェックボックスが\表\示されず、投票ができなくなります。</p>\n";
print "<p>・　ユーザービリティを重視し、投票ボタンは５件ごとに\表\示されます。</p><p>・　連続投票や重複投票は無効となります。また、いたずら防止のため、誰が何回無効投票を行ったのか等の足取りをログファイルに記録しています。</p>\n";

print "<p>・　新しい項目を増やしたい場合は、「新規項目投票」の入力欄に入力し、<input type=\"button\" value=\"投票\"> ボタンをクリックします。なお、入力された文字に、設定で禁止された文字を含む場合、投稿は受け付けられません。また、その項目内容に対して関連ホームページがある場合は、そのページのアドレスを「関連URL」の入力欄に入力してから投票してください。項目名にリンクがつきます。</p>\n";
print "<p>・　テーマによっては、新規項目の投票は管理人のみが行えるように設定されている場合があります。その場合は、上記入力欄は\表\示されません。詳しくは管理人までお問い合わせ下さい。</p><p>　</p>\n";

if ( $view_s ) {
	print "<p>■　コメントについて</p>\n";
	if ( $view_h eq "1" ) { $mg = "投稿されたコメントの一つがランダムで"; }
	elsif ( $view_h eq "2" ) { $mg = "最新のコメントが"; }
	elsif ( $view_h eq "3" ) { $mg = "一番最初に投稿されたコメントが"; }
	print "<p>・　各項目に対してコメントをつけることができます。アンケートページでは、各項目ごとに$mgプレビューされます。</p>";
	print "<p>・　既に投稿されたコメントを見るには <input type=\"button\" value=\"見\"> ボタンをクリックします。上から順に最新のコメントが\表\示されます。$ch_time時間以内のコメントが付いている場合は、ボタンの最初に ! マークが付きます。</p>\n";
	print "<p>・　コメントをつけるには <input type=\"button\" value=\"書\"> ボタンを押してください。コメントを書く際には、下のフレームに今までのコメントが\表\示され、参照できるようになっています。また、コメントは１項目に対しいくつでもつけることができますが、重複したコメント投稿はできません。</p>\n";
	print "<p>・　投稿可\能\な文字数は$c_max文字です。また、一つの項目に対してつけることのできるコメントは$max個です。これを越えてコメントが投稿された場合、古いコメントが削除されます。</p>\n";
	if ( $namechck ) { print "<p>・　コメントは匿名投稿が可\能\です。匿名で投稿したい場合は「名前」入力欄を空欄にして投稿してください。</p>\n"; }
	print "<p>・　コメントの編集は管理人のみが行えます。編集を希望する場合は、管理人までメールにてお問い合わせ下さい。</p><p>　</p>\n";
	}
print "<p>■ セキュリティ</p><p>・　管理人は、このスクリプトへのアクセス情報を管理する権限、悪質な行為を行った者のアクセスを禁じる権限、投票されたあらゆるデーターを編集する権限、不当なURLからの書込を禁じる権限、を持ちます。</p><BR><BR>\n";
print "</td></tr></table>";
&copy
}


# 移動処理_________________________________________________
sub move_to {
if ( $move_op ) {
	print "Content-type: text/html\n\n";
	print "<html><head>\n<meta http-equiv=\"refresh\" content=\"0\;URL=$move_to\">\n</head><body></body></html>";
	} else {
	print "Location: $move_to\n\n";
	}
exit;
}


# エラー処理_______________________________________________
sub error {
&head;
print "<table width=80% border=0 cellspacing=0 cellpadding=1 align=center bgcolor=\"#000088\"><tr><td><font color=#FFFFFF size=2>&nbsp;<b>エラー</b></font></td></tr></table>\n";
print "<center><BR><p>$_[0]</p><BR><p><form><input type=\"button\" value=\"前のページに戻る\" onClick=\"history.back()\"></form></p></center></body></html>";
$error = 1; &copy;
exit;
}


# 著作権表示_______________________________________________
sub copy {
if ( $bu ) { print "<p>[ <a href=$bu>戻る</a> ]</p>"; }
print "<hr><table border=0 width=100%>";
if ( !$error ) { print "<tr><form action=\"web_de.cgi\" method=post><td width=20%><font size=2><input type=hidden name=_mode value=system><input type=password name=pass size=8><input type=submit value=\"管理\"><input type=hidden name=id value=$id_r></font></td></form>"; } else { print "<tr><td><br></td>"; }
print "<td align=center width=60%><font size=2>$ver</font></td><td align=right width=20%>\n<!-- 著作権表\示。削除不可 -->";
if ( !$pass ) { print "<a href=http://www.coolandcool.net/ target=\"_blank\">"; } else { print "<a name=dummy>"; }
print "<img src=\"$icon_dir/copyright.gif\" border=0 width=100 height=21></a></td></tr></table>\n";
print "$dncm</body></html>\n";
exit;
}

exit;
